全部產品
Search
文件中心

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

更新時間:Jun 13, 2026

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

說明

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

情境說明

訂閱配置說明

配置訂閱時,通過事件規則指定訂閱的事件類型為檔案提交或發布。

  • 標準模式空間環境時:dataworks:FileChange:CommitFile

  • 簡單模式空間環境時:dataworks:FileChange:DeployFile

操作步驟

步驟一:配置自訂匯流排

開啟並配置訊息訂閱的詳細步驟請參見開啟訊息訂閱,以下為本實踐中的核心配置流程與注意事項。

  1. 登入事件匯流排EventBridge控制台,單擊左側導覽列事件總線,進入事件匯流排建立頁面。

    若未開通事件匯流排,請開通事件匯流排EventBridge並授權
  2. 單擊image按鈕,建立自訂事件匯流排

    1. 匯流排模組內配置完自訂事件匯流排名稱後,單擊下一步,進入事件來源配置。

    2. 單擊跳過,跳過事件來源規則目標模組的配置。同時填寫描述資訊。步驟 2(事件來源)、步驟 3(規則)和步驟 4(目標)可跳過。

  3. 單擊左側導覽列事件總線進入事件匯流排建立頁面,找到已建立的事件匯流排後,單擊名稱,進入事件匯流排概覽頁面。

    • 單擊左側導覽列事件規則進入事件規則頁面後,單擊建立規則建立事件規則。

    • 本實踐定義該EventBridge自訂匯流排可接收DataWorks檔案提交事件訊息和檔案發布事件訊息,配置demo與核心參數如下。

      1. 配置基本資料自訂規則名稱即可。

      2. 配置事件模式

        • 事件來源類型:選擇自訂事件來源

        • 事件來源:不進行配置。

        • 模式內容:以JSON格式編寫,配置內容如下。本樣本以標準空間為例。

          說明

          如果是簡單模式的工作空間,可配置為dataworks:FileChange:DeployFile

          {
              "source": [
                  "acs.dataworks"
              ],
              "type": [
                  "dataworks:FileChange:CommitFile"
              ]
          }
          • source:定義事件的產品名稱標識acs.dataworks

          • type:定義產品下事件的類型標識,配置為dataworks:FileChange:CommitFile

        • 事件模式調試:將sourcetype取值進行補充修改,然後進行事件測試,測試成功後單擊下一步。單擊測試,頁面提示"匹配通過,事件可正常被觸發",表示事件模式配置正確。

      3. 配置事件目標

        • 服務類型:選擇HTTPS或HTTP,更多服務類型可參見管理事件規則

        • URL:填寫接收自訂匯流排推送資訊的URL,例如https://伺服器位址:連接埠號碼/extensions/consumer

          說明

          此處請填寫擴充程式部署的服務端地址。

        • Body:選擇完整事件

        • 網路類型:選擇公網

步驟二:配置事件分發通道

  1. 進入開放平台頁面。

    登入DataWorks控制台,切換至目標地區後,單擊左側導覽列的更多 > 開放平台,單擊進入開放平台,進入開發人員後台頁面。

  2. 在開發人員後台頁面,單擊左側導覽列OpenEvent,進入頁面後,單擊添加事件分發通道,在彈窗內進行配置。

    • 要分發事件的工作空間:選擇已建立空間。

    • 指定分發到EventBridge中自訂匯流排:選擇步驟一建立的事件匯流排。

  3. 儲存事件分發通道後,在事件分發通道的操作列,單擊啟用按鈕,啟用建立的事件分發通道。

步驟三:註冊並配置擴充程式

  1. 在開發人員後台頁面,單擊左導覽列擴展程序,進入頁面後,單擊註冊擴展程序,在彈窗內進行配置。

    1. 部署方式選擇:通過自建服務部署

    2. 註冊擴充程式。

      • 擴展程序名稱:自訂配置。

      • 處理的擴展點:選擇檔案提交前置事件檔案發布前置事件

      • 測試用工作空間:配置後,可在擴充性程式建立好,但尚未提交前針對該空間內進行擴充程式測試。

      其他參數可根據介面提示進行配置即可。

  2. 配置完成以上內容後,單擊確定儲存註冊擴充程式。

  3. 在已建立好的擴充程式的操作列,單擊提交,進入審核狀態。

    說明
    • 擴充程式審核由DataWorks平台審核,審核事件通常在T+3個工作日完成,請耐心等待。

    • 如需要測試建立的擴充程式,需要配置測試用工作空間

  4. 審核通過後,單擊操作列的上線,即可上線使用該擴充程式。

  5. 單擊擴展程序管理按鈕,進入管理中心 > 擴展程序頁面,選擇建立的擴充程式,在啟用列啟用該擴充程式。

開發配置擴充程式

範例程式碼

該代碼通過EventBridge推送至服務的訊息調用服務,擷取服務啟動的當前日期與節假日及其封網管控日期進行對比,判斷是否為管控日期,判斷結果通過UpdateIDEEventResult這個OpenAPI來回調至DataWorks中。

環境構建Java8Maven構建工具。

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;
  /**
   * 接收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
      Client 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 response = client.updateIDEEventResult(updateIDEEventResultRequest);
              // 請求的唯一標識,用於後續錯誤排查使用
              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("未能過濾其他事件,請檢查配置步驟");
      }
  }
}

樣本工程部署

  1. 準備環境與工程

  2. 部署方式

    • 本地部署:將工程檔案打成jar包後,在本地環境中已部署Java8和Maven工具的本機伺服器或Windows上進行java -jar yourapp.jar運行服務程式。

    • 雲平台部署:將工程檔案打成jar包後,上傳至相應的運行環境例如:Docker容器、雲端服務器等進行部署。

  3. 下載工程後,進入工程根目錄執行打包命令,將工程專案打成JAR包。

    mvn clean package -Dmaven.test.skip=true spring-boot:repackage
  4. 執行jar包:

    java -jar target/extension-demo-deploycontroller-1.0.jar

此時會成功啟動工程,如以下輸出所示:

.   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.7.2)
2022-08-02 20:07:59.521  INFO 48144 --- [           main] com.aliyun.dataworks.DemoStarter          : Starting DemoStarter v1.0 using Java 1.8.0_151 on xxxdeMacBook-Pro.local with PID 48144 (/xxx/xxx/n-demo-deploycontroller/target/extension/demo-deploycontroller-1.0.jar started by xxx in xxx/xxx/extension-xxx-demo-deploycontroller)
2022-08-02 20:07:59.523  INFO 48144 --- [           main] com.aliyun.dataworks.DemoStarter          : No active profile set, falling back to 1 default profile: "default"
2022-08-02 20:08:00.440  INFO 48144 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2022-08-02 20:08:00.452  INFO 48144 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2022-08-02 20:08:00.452  INFO 48144 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.65]
2022-08-02 20:08:00.452  INFO 48144 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2022-08-02 20:08:00.576  INFO 48144 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1002 ms
2022-08-02 20:08:00.576  INFO 48144 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2022-08-02 20:08:00.945  INFO 48144 --- [           main] com.aliyun.dataworks.DemoStarter          : Started DemoStarter in 1.771 seconds (JVM running for 2.199)
2022-08-02 20:08:07.853  INFO 48144 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2022-08-02 20:08:07.854  INFO 48144 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'

在瀏覽器輸入http://localhost:8080/index會得到"hello world!",表示應用成功部署,打通網路後即可訂閱EventBridge的訊息了。

結果驗證

完成代碼部署與打通EventBridge的網路後,您可以在開啟擴充程式的空間內進行驗證。

驗證方式:在代碼編輯器中單擊提交按鈕觸發擴充程式的提交前置事件檢查。提交後介面彈出"檢查中"提示,表示檢查通過後將自動執行操作,可在左側操作檢查面板查看檢查記錄列表及狀態。單擊編輯器底部操作檢查面板可查看檢查詳情,包括檢查類型(如提交前檢查_測試程式)、目前狀態及查看詳情操作入口。