DataWorks的開發平台提供了OpenAPI、OpenEvent、Extensions功能,支援您通過這三個開放性功能,實現對指定流程的自訂管控與響應。本文以一個任務發布封網管控的業務情境,如在資料開發頁面提交發布節時間點事件為例,為您示範如何進行開放平台的相關配置。
背景資訊
本實踐涉及的開放平台的相關功能介紹與基本概念可參見OpenEvent概述、擴充程式概述。
開啟並配置訊息訂閱(OpenEvent)
開啟並配置訊息訂閱的詳細步驟請參見開啟訊息訂閱,以下為本實踐中的核心配置流程與注意事項。
- 在EvenBridge控制台,跳過事件來源等配置,快速建立一個自訂匯流排。
- 在EvenBridge控制台對應的事件匯流排中,建立事件規則。本實踐以標準模式的工作空間內,資料開發頁面提交發布節點的情境為例,配置demo與核心參數配置如下。
- 配置事件模式。
{ "source": [ "acs.dataworks" ], "type": [ "dataworks:FileChange:CommitFile" ] }
- source:定義事件的產品名稱標識,配置為acs.dataworks。
- type:定義產品下事件的類型標識,配置為dataworks:FileChange:CommitFile。您可以在下方的事件模式調試中,將source、type取值進行補充修改,然後進行事件測試,測試成功後單擊下一步。說明 如果是簡單模式的工作空間,可配置為dataworks:FileChange:DeployFile。
- 配置事件目標中,服務類型選擇為HTTPS,並填寫合適的URL,其他參數可保持預設。
- 配置事件模式。
- 進入DataWorks控制台的開放平台頁面,在OpenEvent頁簽添加事件分發通道。
- 在DataWorks控制台的開放平台頁面,啟用上述訊息分發通道。
註冊並配置擴充程式(Extensions)
註冊並配置擴充程式的詳細步驟請參見準備工作,以下為本實踐中的核心配置流程與注意事項。
- 註冊擴充程式。進入DataWorks控制台的開放平台頁面,在擴充程式頁簽單擊註冊擴充程式。本實踐以在資料開發頁面提交節點的事件為樣本,註冊擴充程式時,處理的擴充點需選擇為檔案提交前置事件,其他參數可根據介面提示進行配置。
- 開發部署擴充程式。配置DataWorks的SDK,配置詳情請參見安裝Java SDK,本實踐的範例程式碼如下。
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.aliyuncs.IAcsClient; import com.aliyuncs.dataworks_public.model.v20200518.UpdateIDEEventResultRequest; import com.aliyuncs.dataworks_public.model.v20200518.UpdateIDEEventResultResponse; import com.aliyuncs.exceptions.ClientException; 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; /** * 接收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)){ //初始化client IAcsClient client = dataWorksOpenApiClient.createClient(); //擷取目前時間 SimpleDateFormat sdf = new SimpleDateFormat(Constants.YYYY_MM_DD); String now = sdf.format(System.currentTimeMillis()); //擷取2022年節假日及其封網管控日期 List<String> holidayList = Arrays.asList(extensionParamProperties.getHolidayList().split(",")); //判斷目前時間是否是管控日 boolean isExists = holidayList.stream().anyMatch(day -> day.equals(now)); //回調方法 UpdateIDEEventResultRequest updateIDEEventResultRequest = new UpdateIDEEventResultRequest(); updateIDEEventResultRequest.setMessageId(jsonObj.getString("id")); updateIDEEventResultRequest.setExtensionCode(extensionParamProperties.getExtensionCode()); //是管控日 檢查不通過 if(isExists){ updateIDEEventResultRequest.setCheckResult(EventCheckEnum.FAIL.getCode()); updateIDEEventResultRequest.setCheckResultTip("管控日不可作提交檔案操作"); }else{ //非管控日 檢查通過 updateIDEEventResultRequest.setCheckResult(EventCheckEnum.OK.getCode()); updateIDEEventResultRequest.setCheckResultTip(EventCheckEnum.OK.getName()); } try { //回調DataWorks UpdateIDEEventResultResponse acsResponse = client.getAcsResponse(updateIDEEventResultRequest); //請求的唯一標識,用於後續錯誤排查使用 System.out.println("acsResponse:" + acsResponse.getRequestId()); } catch (ClientException e) { //請求的唯一標識,用於後續錯誤排查使用 System.out.println("RequestId:" + e.getRequestId()); //錯誤狀態代碼 System.out.println("ErrCode:" + e.getErrCode()); //錯誤描述資訊 System.out.println("ErrMsg:" + e.getErrMsg()); } }else{ System.out.println("未能過濾其他事件,請檢查配置步驟"); } } }
- 啟用擴充程式。擴充程式註冊完成後,單擊擴充程式管理,進入管理中心,在擴充程式頁面開啟上述註冊的擴充程式的啟動開關,根據介面提示完成授權即可啟用擴充程式。
- 本地部署運行。下載工程:
- 依賴環境:java8及以上,maven構建工具。
- 工程下載連結:extension-demo-deploycontroller.zip (30 KB)。
獲得可直接啟動並執行jar後執行:mvn clean package -Dmaven.test.skip=true spring-boot:repackage
此時會成功啟動工程,如下圖所示:在瀏覽器輸入java -jar target/extension-demo-deploycontroller-1.0.jar
http://localhost:8080/index
會得到"hello world!"
,表示應用成功部署,打通網路後即可訂閱EventBridge的訊息了。
結果驗證
完成上述實踐配置後,您在資料開發頁面提交節點時,會觸發擴充點事件檢查。