DataWorks menyediakan fitur OpenAPI, OpenEvent, dan Extensions. Gunakan ketiga kemampuan terbuka ini untuk menerapkan kontrol kustom dan respons terhadap alur kerja tertentu. Topik ini menjelaskan cara mengonfigurasi Open Platform melalui skenario bisnis: mengontrol rilis tugas selama periode pembekuan jaringan saat mengirimkan event node deployment pada halaman Data Development.
Untuk ikhtisar fitur Open Platform dan konsep dasar yang digunakan dalam praktik ini, lihat Ikhtisar OpenEvent dan Ikhtisar Extensions.
Deskripsi skenario
Konfigurasi Subskripsi
Saat mengonfigurasi subscription, tentukan jenis event sebagai commit file atau deployment file menggunakan aturan event.
Pada ruang kerja mode standar: dataworks:FileChange:CommitFile.
Pada ruang kerja mode dasar: dataworks:FileChange:DeployFile.
Prosedur
Langkah 1: Konfigurasi custom event bus
Untuk langkah-langkah detail mengenai cara mengaktifkan dan mengonfigurasi subscription pesan, lihat Aktifkan subscription pesan. Berikut ini menjelaskan langkah-langkah konfigurasi inti dan pertimbangan utama untuk praktik ini.
Masuk ke Konsol EventBridge. Di panel navigasi sebelah kiri, klik Event Bus untuk membuka halaman pembuatan event bus.
Jika Anda belum mengaktifkan EventBridge, aktifkan EventBridge dan berikan izin.
Klik tombol
lalu klik Create custom event bus.Pada bagian Bus, masukkan Custom event bus name, lalu klik Next step untuk mengonfigurasi sumber event.
Klik Skip untuk melewati konfigurasi bagian Event source, Rule, dan Target. Masukkan Description. Anda dapat melewatkan Langkah 2 (Event source), 3 (Rule), dan 4 (Target).
Di panel navigasi sebelah kiri, klik Event Bus untuk kembali ke daftar event bus. Temukan custom event bus Anda, lalu klik namanya untuk membuka halaman ikhtisar.
Klik Event Rules di panel navigasi sebelah kiri untuk membuka halaman aturan event, lalu klik Create Rule untuk membuat aturan event baru.
Praktik ini mengonfigurasi custom EventBridge bus agar menerima event commit file dan deployment file dari DataWorks. Konfigurasi demo dan parameter utamanya adalah sebagai berikut.
Configure basic information: Masukkan nama aturan kustom.
Configure event pattern:
Event source type: Pilih Custom event source.
Event source: Biarkan bidang ini kosong.
Pattern content: Tulis pola dalam format JSON seperti di bawah ini. Contoh ini menggunakan ruang kerja mode standar.
CatatanJika Anda menggunakan ruang kerja mode dasar, atur nilainya menjadi dataworks:FileChange:DeployFile.
{ "source": [ "acs.dataworks" ], "type": [ "dataworks:FileChange:CommitFile" ] }source: Menentukan identifier produk sebagai acs.dataworks.
type: Menentukan jenis event di bawah produk sebagai dataworks:FileChange:CommitFile.
Test event pattern: Perbarui nilai source dan type, lalu uji event tersebut. Setelah pengujian berhasil, klik Next. Klik Test. Jika halaman menampilkan "Match succeeded. The event can be triggered normally," maka pola event telah dikonfigurasi dengan benar.
Configure event target.
Service Type: Pilih HTTPS atau HTTP. Untuk jenis layanan lainnya, lihat Manage event rules.
URL: Masukkan URL yang menerima pesan yang didorong dari custom event bus, contohnya:
https://server address:port/extensions/consumer.CatatanMasukkan alamat server tempat extension Anda diterapkan.
Body: Pilih Complete event.
Network type: Pilih Internet.
Langkah 2: Konfigurasi saluran distribusi event
Masuk ke Konsol DataWorks. Di Wilayah target, klik di panel navigasi sebelah kiri, lalu klik Go to Open Platform untuk membuka halaman Developer Backend.
-
Pada halaman Developer Backend, klik OpenEvent di panel navigasi sebelah kiri. Pada halaman yang muncul, klik Add Event Distribution Channel dan konfigurasikan parameter dalam dialog tersebut.
-
Workspace for Distribution of Event Messages: Pilih ruang kerja yang telah Anda buat.
-
Specify Custom Event Bus in EventBridge for Distribution of Event Messages: Pilih event bus yang telah Anda buat di Langkah 1.
-
-
Setelah menyimpan saluran distribusi event, temukan saluran tersebut dan klik Enable di kolom Operation untuk mengaktifkannya.
Langkah 3: Daftarkan dan konfigurasikan extension
Pada halaman Developer Backend, klik Extension di panel navigasi sebelah kiri. Lalu, klik Register Extension dan konfigurasikan parameter dalam dialog tersebut.
Metode deployment: Pilih Self-managed service deployment.
Daftarkan extension.
Extension Name: Masukkan nama kustom.
Extension Point Event: Pilih Pre-file commit event dan Pre-file deployment event.
Workspace for Testing: Setelah dikonfigurasi, Anda dapat menguji extension di ruang kerja ini sebelum menyerahkannya.
Konfigurasikan parameter lainnya sesuai petunjuk.
Setelah menyelesaikan konfigurasi, klik Determine untuk menyimpan extension yang telah didaftarkan.
Di kolom Operation untuk extension yang Anda buat, klik Submit untuk memulai proses peninjauan.
Catatan-
Extension ditinjau oleh platform DataWorks. Peninjauan biasanya selesai dalam tiga hari kerja.
-
Untuk menguji extension yang Anda buat, Anda harus mengonfigurasi Workspace for Testing.
-
Setelah extension disetujui, klik Publish di kolom Actions.
Klik Manage Extensions untuk membuka halaman . Pilih extension Anda dan aktifkan di kolom Enable.
Mengembangkan dan mengonfigurasi ekstensi
Kode contoh
Kode ini menerima pesan yang didorong oleh EventBridge, membandingkan tanggal saat ini dengan daftar hari libur dan tanggal pembekuan jaringan, lalu mengembalikan hasilnya ke DataWorks menggunakan operasi API UpdateIDEEventResult.
Lingkungan: Java 8 dengan Maven.
package com.aliyun.dataworks.demo;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.dataworks.config.Constants;
import com.aliyun.dataworks.config.EventCheckEnum;
import com.aliyun.dataworks.config.ExtensionParamProperties;
import com.aliyun.dataworks.services.DataWorksOpenApiClient;
import com.aliyun.dataworks_public20200518.Client;
import com.aliyun.dataworks_public20200518.models.UpdateIDEEventResultRequest;
import com.aliyun.dataworks_public20200518.models.UpdateIDEEventResultResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.List;
/**
* @author dataworks demo
*/
@RestController
@RequestMapping("/extensions")
public class ExtensionsController {
@Autowired(required = false)
private DataWorksOpenApiClient dataWorksOpenApiClient;
@Autowired
private ExtensionParamProperties extensionParamProperties;
/**
* Menerima pesan yang didorong oleh EventBridge.
*
* @param jsonParam
*/
@PostMapping("/consumer")
public void consumerEventBridge(@RequestBody String jsonParam) {
JSONObject jsonObj = JSON.parseObject(jsonParam);
String eventCode = jsonObj.getString(Constants.EVENT_CODE_FILED);
if (Constants.COMMIT_FILE_EVENT_CODE.equals(eventCode)) {
// Inisialisasi client
Client client = dataWorksOpenApiClient.createClient();
// Dapatkan tanggal saat ini
SimpleDateFormat sdf = new SimpleDateFormat(Constants.YYYY_MM_DD);
String now = sdf.format(System.currentTimeMillis());
// Dapatkan daftar hari libur dan tanggal pembekuan jaringan tahun 2022
List<String> holidayList = Arrays.asList(extensionParamProperties.getHolidayList().split(","));
// Periksa apakah tanggal saat ini merupakan tanggal pembekuan
boolean isExists = holidayList.stream().anyMatch(day -> day.equals(now));
// Siapkan permintaan callback
UpdateIDEEventResultRequest updateIDEEventResultRequest = new UpdateIDEEventResultRequest();
updateIDEEventResultRequest.setMessageId(jsonObj.getString("id"));
updateIDEEventResultRequest.setExtensionCode(extensionParamProperties.getExtensionCode());
// Jika tanggal pembekuan, pemeriksaan gagal
if (isExists) {
updateIDEEventResultRequest.setCheckResult(EventCheckEnum.FAIL.getCode());
updateIDEEventResultRequest.setCheckResultTip("Pengiriman file tidak diizinkan pada tanggal pembekuan");
} else {
// Jika bukan tanggal pembekuan, pemeriksaan berhasil
updateIDEEventResultRequest.setCheckResult(EventCheckEnum.OK.getCode());
updateIDEEventResultRequest.setCheckResultTip(EventCheckEnum.OK.getName());
}
try {
// Callback ke DataWorks
UpdateIDEEventResultResponse response = client.updateIDEEventResult(updateIDEEventResultRequest);
// ID unik permintaan, digunakan untuk troubleshooting
System.out.println("response:" + response.getBody().getRequestId());
} catch (Exception e) {
System.out.println("consumerEventBridge error:" + e.getMessage());
throw new RuntimeException(e);
}
} else {
System.out.println("Event lain tidak difilter. Periksa langkah konfigurasi Anda.");
}
}
}Terapkan proyek contoh
Siapkan lingkungan dan proyek
Dependencies: Java 8 atau versi lebih baru, Maven.
Tautan unduh proyek: extension-demo-deploycontroller.zip (30 KB).
Opsi deployment
Deployment lokal: Kemas proyek menjadi file JAR dan jalankan di server lokal atau mesin Windows yang telah menginstal Java 8 dan Maven menggunakan perintah
java -jar yourapp.jar.Deployment cloud: Kemas proyek menjadi file JAR dan terapkan ke lingkungan runtime seperti kontainer Docker atau instans Elastic Compute Service.
Setelah mengunduh proyek, buka direktori root dan jalankan perintah berikut untuk mengemasnya menjadi file JAR.
mvn clean package -Dmaven.test.skip=true spring-boot:repackageJalankan file JAR:
java -jar target/extension-demo-deploycontroller-1.0.jar
Aplikasi berhasil dimulai, seperti yang ditunjukkan pada output berikut:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.2)
2022-08-02 20:07:59.521 INFO 48144 --- [ main] com.aliyun.dataworks.DemoStarter : Memulai DemoStarter v1.0 menggunakan Java 1.8.0_151 di xxxdeMacBook-Pro.local dengan PID 48144 (/xxx/xxx/n-demo-deploycontroller/target/extension/demo-deploycontroller-1.0.jar dimulai oleh xxx di xxx/xxx/extension-xxx-demo-deploycontroller)
2022-08-02 20:07:59.523 INFO 48144 --- [ main] com.aliyun.dataworks.DemoStarter : Tidak ada profil aktif yang ditetapkan, kembali ke 1 profil default: "default"
2022-08-02 20:08:00.440 INFO 48144 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat diinisialisasi dengan port: 8080 (http)
2022-08-02 20:08:00.452 INFO 48144 --- [ main] o.apache.catalina.core.StandardService : Memulai layanan [Tomcat]
2022-08-02 20:08:00.452 INFO 48144 --- [ main] org.apache.catalina.core.StandardEngine : Memulai mesin Servlet: [Apache Tomcat/9.0.65]
2022-08-02 20:08:00.452 INFO 48144 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Menginisialisasi Spring embedded WebApplicationContext
2022-08-02 20:08:00.576 INFO 48144 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: inisialisasi selesai dalam 1002 ms
2022-08-02 20:08:00.576 INFO 48144 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat dimulai pada port: 8080 (http) dengan jalur konteks ''
2022-08-02 20:08:00.945 INFO 48144 --- [ main] com.aliyun.dataworks.DemoStarter : DemoStarter dimulai dalam 1.771 detik (JVM berjalan selama 2.199)
2022-08-02 20:08:07.853 INFO 48144 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Menginisialisasi Spring DispatcherServlet 'dispatcherServlet'
2022-08-02 20:08:07.854 INFO 48144 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Menginisialisasi Servlet 'dispatcherServlet'Buka http://localhost:8080/index di browser Anda. Jika Anda melihat "hello world!", aplikasi telah berhasil diterapkan. Setelah terhubung ke jaringan, aplikasi dapat menerima pesan dari EventBridge.
Verifikasi hasil
Setelah kode diterapkan dan terhubung ke EventBridge, verifikasi pengaturan di ruang kerja tempat extension diaktifkan.
Metode verifikasi: Di editor kode, klik Submit untuk memicu pemeriksaan event pra-submit. Setelah pengiriman, muncul pesan "Checking". Jika pemeriksaan berhasil, operasi akan dilanjutkan secara otomatis. Lihat catatan dan status pemeriksaan di panel Operation checks di sebelah kiri. Klik panel Operation checks di bagian bawah editor untuk melihat detail seperti jenis pemeriksaan (misalnya, Pre-submit check_Test program), status saat ini, dan tautan view details.