DataWorks Open Platform menyediakan fitur OpenAPI, OpenEvent, dan Extensions. Anda dapat menggunakan fitur-fitur ini untuk menerapkan kontrol dan respons kustom pada alur tertentu. Topik ini menggunakan skenario penguncian penerapan tugas sebagai contoh untuk menunjukkan cara mengonfigurasi Open Platform guna menangani event, seperti mengirimkan node untuk penerapan di halaman Data Development.
Untuk pengenalan fitur dan konsep Open Platform yang digunakan dalam praktik terbaik ini, lihat OpenEvent overview dan Extensions overview.
Deskripsi skenario
Konfigurasi langganan
Saat mengonfigurasi subscription, Anda dapat menggunakan aturan event untuk menentukan jenis event saat file dikirim atau diterapkan.
Untuk ruang kerja dalam mode standar, gunakan dataworks:FileChange:CommitFile.
Untuk ruang kerja dalam mode dasar, gunakan dataworks:FileChange:DeployFile.
Prosedur
Langkah 1: Konfigurasi custom event bus
Untuk langkah-langkah detail tentang cara mengaktifkan dan mengonfigurasi subscription pesan, lihat Enable message subscription. Bagian berikut menjelaskan alur konfigurasi inti dan catatan penting untuk praktik terbaik ini.
Masuk ke Konsol EventBridge. Di panel navigasi sebelah kiri, klik Event Buses untuk membuka halaman pembuatan event bus.
Jika EventBridge belum diaktifkan, silakan aktifkan layanan dan selesaikan otorisasi.
Klik Quickly Create untuk Create Custom Event Bus.
Pada bagian Event Bus, konfigurasikan Name lalu klik Next Step untuk menuju konfigurasi sumber event.
Klik Skip untuk melewati konfigurasi Event Source, Event Rule, dan Event Target.

Di panel navigasi sebelah kiri, klik Event Buses. Temukan event bus yang telah Anda buat dan klik namanya untuk membuka halaman ikhtisar.
Di panel navigasi sebelah kiri, klik Event Rules. Pada halaman Event Rules, klik Create Rule untuk membuat aturan event baru.
Dalam praktik terbaik ini, custom EventBridge bus dikonfigurasi untuk menerima pesan event pengiriman file dan penerapan file dari DataWorks. Bagian berikut menjelaskan konfigurasi demo dan parameter inti.
Configure Basic Info: Masukkan nama aturan kustom.
Configure Event Pattern
Event Source Type: Pilih Custom Event Source.
Event Source: Biarkan parameter ini kosong.
Pattern Content: Tulis konten dalam format JSON sebagai berikut. Contoh ini menggunakan ruang kerja dalam mode standar.
CatatanUntuk ruang kerja dalam mode dasar, atur parameter ini menjadi dataworks:FileChange:DeployFile.
{ "source": [ "acs.dataworks" ], "type": [ "dataworks:FileChange:CommitFile" ] }source: Menentukan identifier nama produk untuk event, yaitu acs.dataworks.
type: Menentukan identifier jenis event untuk produk tersebut. Atur parameter ini menjadi dataworks:FileChange:CommitFile.
Event Pattern Debugging: Ubah nilai source dan type, lalu uji event tersebut. Jika pengujian berhasil, klik Next.

Configure Targets
Service Type: Pilih HTTPS atau HTTP. Untuk informasi lebih lanjut tentang jenis layanan, lihat Manage event rules.
URL: Masukkan URL untuk menerima pesan yang didorong dari custom bus, misalnya
https://server_address:port_number/extensions/consumer.CatatanMasukkan URL server dari extension yang telah diterapkan.
Body: Pilih Complete Event.
Network Type: Pilih Internet.

Langkah 2: Konfigurasi saluran distribusi event
Buka tab Developer Backend.
Masuk ke konsol DataWorks. Pada bilah navigasi atas, pilih wilayah yang diinginkan. Di panel navigasi sisi kiri, pilih . Pada halaman yang muncul, klik Go to Open Platform. Tab Developer Backend akan ditampilkan.
Pada halaman Developer Backend, klik OpenEvent di panel navigasi kiri. Pada halaman yang muncul, klik Add Event Distribution Channel dan konfigurasikan parameter dalam dialog.
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 Actions.

Langkah 3: Daftarkan dan konfigurasikan extension
Pada halaman Developer Backend, klik Extensions di panel navigasi kiri. Lalu, klik Register Extension dan konfigurasikan parameter dalam dialog.
Deployment Method: Pilih Deploy with Self-managed Service.
Daftarkan extension.
Extension Name: Masukkan nama kustom.
Processed Extension Points: Pilih Pre-event for Node Commit dan Pre-event for Node Deployment.
Workspace for Testing: Setelah konfigurasi selesai, Anda dapat menguji extension di ruang kerja ini setelah extension dibuat tetapi sebelum diajukan.
Konfigurasikan parameter lain sesuai petunjuk pada antarmuka.

Setelah menyelesaikan konfigurasi, klik OK untuk menyimpan extension yang telah didaftarkan.
Di kolom Actions untuk extension tersebut, klik Submit untuk memulai proses peninjauan.
CatatanExtension akan ditinjau oleh platform DataWorks. Proses peninjauan biasanya memerlukan waktu tiga hari kerja. Harap bersabar.
Untuk menguji extension yang telah Anda buat, Anda harus mengonfigurasi Workspace for Testing.
Setelah extension disetujui, klik Publish di kolom Actions untuk menerbitkannya.
Klik Manage Extensions untuk membuka halaman . Pilih extension yang telah Anda buat dan aktifkan di kolom Enable.
Kembangkan dan konfigurasikan extension
Kode contoh
Kode ini menggunakan pesan yang didorong dari EventBridge ke layanan untuk memanggil layanan tersebut. Kode ini membandingkan tanggal saat ini dengan tanggal libur dan tanggal penguncian yang telah dikonfigurasi untuk menentukan apakah hari tersebut merupakan hari penguncian. Hasilnya dikirim kembali ke DataWorks melalui callback menggunakan operasi OpenAPI UpdateIDEEventResult.
Lingkungan: Java 8 dan tool build 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;
/**
* Terima pesan yang didorong dari 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 waktu saat ini
SimpleDateFormat sdf = new SimpleDateFormat(Constants.YYYY_MM_DD);
String now = sdf.format(System.currentTimeMillis());
// Dapatkan daftar hari libur dan tanggal penguncian tahun 2022
List<String> holidayList = Arrays.asList(extensionParamProperties.getHolidayList().split(","));
// Periksa apakah tanggal saat ini merupakan hari penguncian
boolean isExists = holidayList.stream().anyMatch(day -> day.equals(now));
// Metode callback
UpdateIDEEventResultRequest updateIDEEventResultRequest = new UpdateIDEEventResultRequest();
updateIDEEventResultRequest.setMessageId(jsonObj.getString("id"));
updateIDEEventResultRequest.setExtensionCode(extensionParamProperties.getExtensionCode());
// Jika hari tersebut merupakan hari penguncian, pemeriksaan gagal
if (isExists) {
updateIDEEventResultRequest.setCheckResult(EventCheckEnum.FAIL.getCode());
updateIDEEventResultRequest.setCheckResultTip("Pengiriman file tidak diizinkan pada hari penguncian.");
} else {
// Jika bukan hari penguncian, pemeriksaan berhasil
updateIDEEventResultRequest.setCheckResult(EventCheckEnum.OK.getCode());
updateIDEEventResultRequest.setCheckResultTip(EventCheckEnum.OK.getName());
}
try {
// Kirim 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("Gagal memfilter event lainnya. Periksa langkah konfigurasi.");
}
}
}Penerapan proyek contoh
Persiapkan lingkungan dan proyek
Lingkungan yang diperlukan: Java 8 atau versi yang lebih baru dan tool build Maven.
Tautan unduhan proyek: extension-demo-deploycontroller.zip (30 KB).
Metode penerapan
Penerapan lokal: Kemas proyek menjadi file JAR. Jalankan program layanan di server lokal atau mesin Windows yang telah menginstal Java 8 dan Maven dengan menjalankan perintah
java -jar yourapp.jar.Penerapan di platform cloud: Kemas proyek menjadi file JAR. Unggah file tersebut ke lingkungan runtime, seperti kontainer Docker atau instans Elastic Compute Service (ECS), untuk penerapan.
Setelah mengunduh proyek, buka direktori root proyek dan jalankan perintah pengemasan untuk mengemas proyek menjadi file JAR.
mvn clean package -Dmaven.test.skip=true spring-boot:repackageJalankan file JAR:
java -jar target/extension-demo-deploycontroller-1.0.jar
Proyek berhasil dimulai, seperti yang ditunjukkan pada gambar berikut.
Masukkan http://localhost:8080/index di browser. Jika "hello world!" dikembalikan, aplikasi telah berhasil diterapkan. Setelah koneksi jaringan terbentuk, Anda dapat berlangganan pesan dari EventBridge.
Verifikasi hasil
Setelah Anda menerapkan kode dan membangun koneksi jaringan ke EventBridge, Anda dapat melakukan verifikasi di ruang kerja tempat extension diaktifkan.
