在DataWorks擴充程式中,您可以自訂邏輯以監管使用者的操作行為,例如攔截和阻斷不當行為,通過擴充程式對特定事件進行訊息通知與流程管控。本文為您介紹如何通過自建服務開發部署擴充程式。
背景資訊
前提條件
已開啟訊息訂閱,自建服務部署擴充程式的方式依賴於EventBridge的訊息分發能力,確保已指定好DataWorks的開放事件訊息可發送至EventBridge中的某一事件中線,並且該事件匯流排的訊息將路由至已在本地或雲上部署完成的服務程式。
處理流程
以下為自建服務部署擴充程式,利用EventBridge消費訊息的基本流程:
說明
擴充點事件觸發後,在等待擴充程式回調API訊息結果時,觸發擴充事件的流程會變成檢查中狀態,直至擴充程式將處理結果返回給DataWorks,DataWorks會根據反饋結果狀態決定是否阻塞本次流程。
使用者側
在DataWorks中以自建服務方式部署擴充程式前,需提前開發擴充程式,並將其部署在雲上或本地。您可參考文檔附錄:DataWorks開放平台範例程式碼庫初始化工程代碼,並從GitHub中擷取開放平台範例程式碼。在擴充程式開發時,您需要根據事件匯流排中的訊息最終路由的服務類型來開發部署擴充程式。
步驟一:配置擴充程式依賴
在開發擴充程式時,需要添加以下依賴進pom.xml
檔案。EventBridge持多種類型終端來處理和消費事件,除以下依賴外,可根據EventBridge設定的事件目標,根據最終訊息路由情況,配置其他依賴。
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dataworks_public20200518</artifactId>
<version>5.6.0</version>
</dependency>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
步驟二:開發擴充程式碼
EventBridge內的事件匯流排路由的訊息將推送至部署在本地或雲上的服務,該服務將接收由事件匯流排推送的DataWorks訊息,並通過DataWorks特定的API回調處理後的結果。
開發程式碼。
解析訊息內容
編寫處理邏輯
返回處理結果至DataWorks
DataWorks推送事件訊息格式可參考附錄:DataWorks發送給EventBridge的訊息格式,在訊息格式中,data
為具體的訊息內容,在實際開發時,可通過訊息格式中的data.eventCode
欄位確認訊息類型,並通過id
欄位擷取訊息詳情。
說明
OpenEvent基於EventBridge實現DataWorks事件訊息的分發,在開發擴充程式前,需提前在EventBridge完成DataWorks訊息訂閱操作,詳情請參見:開啟訊息訂閱。
需根據實際業務情境,針對事件匯流排推送的訊息進行邏輯處理。在擴充程式碼開發過程中,您可通過以下方式提高開發效率和應用效果。
擴充程式服務對擴充點處理的結果需要通過OpenAPI的方式返回給DataWorks。在回調OpenAPI時,需根據擴充程式處理的擴充點事件所在模組,選擇合適的OpenAPI返回針對該類訊息的處理結果。
回調的API,將返回當前服務用於哪一個擴充程式(ExrensionCode)、哪一個事件訊息(Messageid)和訊息處理結果(CheckResult)
代碼開發完成後,需將程式打包為可啟動並執行.jar
檔案,以便後續部署服務使用。
步驟三:部署擴充程式
擴充程式碼開發調試完成後,您需要在阿里雲ECS或其他服務商將打包好的程式碼封裝部署為一個應用服務。
DataWorks產品側
完成代碼開發後,可在DataWorks產品側完成擴充程式的註冊與管理操作。
步驟一:註冊擴充程式
開發使用擴充程式前,您需先在DataWorks註冊一個擴充程式,擷取對應的Extension Code,用於後續的擴充程式碼開發,操作步驟如下。
註冊擴充程式。
在左側導覽列單擊擴充程式,進入擴充程式頁面。
單擊,選擇通過自建服務部署並配置擴充程式資訊。
參數 | 如何配置 |
擴充程式名稱 | 自訂擴充程式的名稱,用於標識擴充程式。 |
處理的擴充點 | 選擇該擴充程式用於處理哪幾類擴充事件觸發的訊息。當前支援的擴充點,詳情請參見支援的擴充點事件列表,您可根據實際情況選擇。 說明 選擇完成後,配置介面會自動根據選擇結果匹配所屬事件和適用模組,無需手動設定。 擴充點事件節流:擴充點事件分為租戶級和空間級,註冊擴充程式時,僅支援選擇某一類層級的擴充點事件。DataWorks支援的擴充點事件所屬層級,請參見開發參考:事件列表與訊息格式。 通過Function Compute部署的擴充程式目前僅支援資料下載前置事件。
|
負責人 | 擴充程式的負責人,方便擴充程式使用者遇到問題時能及時聯絡到負責人。 |
測試用工作空間 | 選擇測試擴充程式的工作空間。擴充程式無需進行上線操作,即可在測試工作空間中生效。 擴充程式上線前,開發人員可在測試空間進行完整鏈路的測實驗證,通過觸發事件,測試DataWorks通過EventBridge發送訊息、擴充程式接收訊息並進行訊息審核與回調。 說明 當處理的擴充點選擇租戶級擴充點事件,無需配置測試用工作空間。 |
擴充程式詳情地址 | 輸入介紹擴充程式詳情的地址,協助擴充程式使用者更好地理解和使用此擴充程式。 您可在開發部署擴充程式時,開發一個擴充程式的詳情展示頁面,將頁面地址配置在此處,以便使用者在觸發擴充程式校正時,可通過連結查看完整的校正過程。例如,此次擴充程式檢查鏈路和阻塞的原因。 |
擴充程式文檔地址 | 輸入擴充程式的協助文檔地址,供擴充程式的使用者閱讀。 您可在開發部署擴充程式時,開發一個擴充程式的協助文檔頁面,將頁面地址配置在此處,以便使用者學習瞭解擴充程式的校正邏輯與屬性。 |
擴充程式參數配置 | DataWorks支援在擴充程式開發過程中使用參數來提高擴充程式開發和應用效率,在擴充程式碼開發時,將需要應用的參數添加至此處即可。 您可直接使用DataWorks提供的典型應用情境的內建參數,也可自訂參數。 支援添加多個參數,一行一個參數,參數格式為key=value 。 說明 例如,您可以使用內建擴充程式參數extension.project.disabled ,使擴充程式對某個工作空間不生效。更多參數的使用,請參見進階應用程式:擴充程式參數配置。 |
擴充程式選項配置 | 輸入提供給擴充程式使用者的功能配置項,可實現該擴充程式在不同工作空間進行個人化管控。擴充程式開發人員需在此介面通過JSON字串定義選項。 例如,可通過選項配置讓擴充程式使用者自行管控SQL長度。JSON格式可參考進階應用程式:擴充程式選項配置。 |
完成擴充程式註冊。
單擊確定,完成擴充程式。
說明
註冊完成後,您可在擴充程式列表,查看此註冊成功的擴充程式。
步驟二:上線擴充程式
擴充程式開發、部署並在DataWorks上註冊完成後,您還需通過測試、審批、上線流程,之後擴充程式責任人之外的其他管理者可在管理中心中啟用該擴充程式,操作詳情請參見:應用擴充程式。
附錄:DataWorks發送給EventBridge的訊息格式
以下內容中,data欄位中的內容為DataWorks推送給EventBridge的內容,EventBridge在此基礎上會補充其他資訊。
{
"datacontenttype": "application/json;charset=utf-8",
"aliyunaccountid": "1111",
"aliyunpublishtime": "2024-07-10T07:25:34.915Z",
"data": {
"tenantId": 28378****10656,
"eventCode": "xxxx"
},
"aliyunoriginalaccountid": "11111",
"specversion": "1.0",
"aliyuneventbusname": "default",
"id": "45ef4dewdwe1-7c35-447a-bd93-fab****",
"source": "acs.dataworks",
"time": "2024-07-10T15:25:34.897Z",
"aliyunregionid": "cn-shanghai",
"type": "dataworks:ResourcesUpload:UploadDataToTable"
}
擴充程式樣本
瞭解上述擴充程式開發注意事項後,您可根據業務需求開發自己的擴充程式碼,以下也提供了一些典型情境下,擴充程式註冊、開發、應用的樣本。