全部產品
Search
文件中心

DataWorks:最佳實務:自訂任務發布封網管控

更新時間:Jun 19, 2024

DataWorks的開發平台提供了OpenAPI、OpenEvent、Extensions功能,支援您通過這三個開放性功能,實現對指定流程的自訂管控與響應。本文以一個任務發布封網管控的業務情境,如在資料開發頁面提交發布節時間點事件為例,為您示範如何進行開放平台的相關配置。

背景資訊

本實踐涉及的開放平台的相關功能介紹與基本概念可參見OpenEvent概述擴充程式概述

開啟並配置訊息訂閱(OpenEvent)

開啟並配置訊息訂閱的詳細步驟請參見開啟訊息訂閱,以下為本實踐中的核心配置流程與注意事項。
  1. EvenBridge控制台,跳過事件來源等配置,快速建立一個自訂匯流排。建立自訂匯流排
  2. EvenBridge控制台對應的事件匯流排中,建立事件規則。
    本實踐以標準模式的工作空間內,資料開發頁面提交發布節點的情境為例,配置demo與核心參數配置如下。
    1. 配置事件模式建立規則
      {
          "source": [
              "acs.dataworks"
          ],
          "type": [
              "dataworks:FileChange:CommitFile"
          ]
      }
      • source:定義事件的產品名稱標識,配置為acs.dataworks
      • type:定義產品下事件的類型標識,配置為dataworks:FileChange:CommitFile
        說明 如果是簡單模式的工作空間,可配置為dataworks:FileChange:DeployFile
        您可以在下方的事件模式調試中,將source、type取值進行補充修改,然後進行事件測試,測試成功後單擊下一步測試
    2. 配置事件目標中,服務類型選擇為HTTPS,並填寫合適的URL,其他參數可保持預設。事件目標
  3. 進入DataWorks控制台的開放平台頁面,在OpenEvent頁簽添加事件分發通道。分發通道
  4. DataWorks控制台的開放平台頁面,啟用上述訊息分發通道。啟用

註冊並配置擴充程式(Extensions)

註冊並配置擴充程式的詳細步驟請參見準備工作,以下為本實踐中的核心配置流程與注意事項。

  1. 註冊擴充程式。
    進入DataWorks控制台的開放平台頁面,在擴充程式頁簽單擊註冊擴充程式註冊擴充程式本實踐以在資料開發頁面提交節點的事件為樣本,註冊擴充程式時,處理的擴充點需選擇為檔案提交前置事件,其他參數可根據介面提示進行配置。
  2. 開發部署擴充程式。
    配置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("未能過濾其他事件,請檢查配置步驟");
            }
        }
    }
                            
  3. 啟用擴充程式。
    擴充程式註冊完成後,單擊擴充程式管理,進入管理中心,在擴充程式頁面開啟上述註冊的擴充程式的啟動開關,根據介面提示完成授權即可啟用擴充程式。啟用擴充程式
  4. 本地部署運行。
    下載工程:下載工程後,進入工程根目錄下執行:
    mvn clean package -Dmaven.test.skip=true spring-boot:repackage
    獲得可直接啟動並執行jar後執行:
    java -jar target/extension-demo-deploycontroller-1.0.jar
    此時會成功啟動工程,如下圖所示:啟動工程在瀏覽器輸入http://localhost:8080/index會得到"hello world!",表示應用成功部署,打通網路後即可訂閱EventBridge的訊息了。

結果驗證

完成上述實踐配置後,您在資料開發頁面提交節點時,會觸發擴充點事件檢查。檔案提交