Todos os produtos
Search
Central de documentação

:Melhores práticas: controle de congelamento de liberação de tarefas personalizadas

Última atualização: Sep 28, 2026

O DataWorks oferece os recursos openapi, OpenEvent e Extensions. Use essas três capacidades abertas para implementar controle e resposta personalizados para fluxos de trabalho específicos. Este tópico demonstra como configurar a Open Platform usando um cenário de negócios: controlar a liberação de tarefas durante um período de congelamento de rede ao enviar um evento de nó de implantação na página Data Development.

Nota

Para obter uma visão geral dos recursos e conceitos básicos da Open Platform usados nesta prática, consulte OpenEvent overview e Extensions overview.

Descrição do cenário

Configuração de assinatura

Ao configurar uma assinatura, especifique o tipo de evento como commit de arquivo ou implantação de arquivo usando uma regra de evento.

  • Em workspaces do modo padrão: dataworks:FileChange:CommitFile.

  • Em workspaces do modo básico: dataworks:FileChange:DeployFile.

Procedimento

Etapa 1: Configure um barramento de eventos personalizado

Para obter as etapas detalhadas sobre como ative e configure assinaturas de mensagens, consulte Enable message subscriptions. A seguir, descrevemos as etapas principais de configuração e as considerações importantes para esta prática.

  1. Faça logon no EventBridge console. No painel de navegação à esquerda, clique em Event Bus e acesse a página de criação do barramento de eventos.

    Caso ainda não tenha ativado o EventBridge, activate EventBridge and grant permissions .
  2. clique em image e clique em Create custom event bus.

    1. Na seção Bus, insira um Custom event bus name e clique em Next step para configurar a origem do evento.

    2. clique em Skip para ignorar a configuração das seções Event source, Rule e Target. Insira uma Description. Você pode ignorar as Etapas 2 (Event source), 3 (Rule) e 4 (Target).

  3. No painel de navegação à esquerda, clique em Event Bus para retornar à lista de barramentos de eventos. Encontre o seu barramento de eventos personalizado e clique em nome dele e acesse a página de visão geral.

    • clique em Event Rules no painel de navegação à esquerda e acesse a página de regras de eventos e clique em Create Rule e crie uma nova regra de evento.

    • Esta prática configura o barramento personalizado do EventBridge para receber eventos de commit e implantação de arquivos do DataWorks. A configuração de demonstração e os parâmetros principais são os seguintes:

      1. Configure basic information: Insira um nome personalizado para a regra.

      2. Configure event pattern:

        • Event source type: Selecione Custom event source.

        • Event source: Deixe este campo em branco.

        • Pattern content: Escreva o padrão no formato JSON conforme mostrado abaixo. Este exemplo usa um workspace do modo padrão.

          Nota

          Se você usar um workspace do modo básico, defina o valor como dataworks:FileChange:DeployFile.

          {
              "source": [
                  "acs.dataworks"
              ],
              "type": [
                  "dataworks:FileChange:CommitFile"
              ]
          }
          • source: Especifica o identificador do product como acs.dataworks.

          • type: Especifica o tipo de evento do product como dataworks:FileChange:CommitFile.

        • Test event pattern: Atualize os valores de source e type e teste o evento. Após um teste bem-sucedido, clique em Next. clique em Test. Se a página exibir "Match succeeded. The event can be triggered normally,", o padrão de evento estará configurado corretamente.

      3. Configure event target.

        • Service Type: Selecione HTTPS ou HTTP. Para outros tipos de service, consulte Manage event rules.

        • URL: Insira a URL que recebe as mensagens enviadas pelo barramento de eventos personalizado, por exemplo: https://server address:port/extensions/consumer.

          Nota

          Insira o endereço do servidor em que a sua extensão está implantada.

        • Body: Selecione Complete event.

        • Network type: Selecione Internet.

Etapa 2: Configure um canal de distribuição de eventos

  1. Faça logon no DataWorks console. Na região de destino, clique em More > Open Platform no painel de navegação à esquerda. clique em Go to Open Platform e acesse a página Developer Backend.

  2. Na página Developer Backend, clique em OpenEvent no painel de navegação à esquerda. Na página exibida, clique em Add Event Distribution Channel e configure as definições na caixa de diálogo.

    • Workspace for Event Distribution: Selecione um workspace criado por você.

    • Custom Bus in Eventbridge for Distribution: Selecione o barramento de eventos criado na Etapa 1.

  3. salve o canal de distribuição de eventos e clique em Enable na coluna Operation do canal e ative.

Etapa 3: Registre e configure uma extensão

  1. Na página Developer Backend, clique em Extension no painel de navegação à esquerda. Na página exibida, clique em Register Extension e configure as definições na caixa de diálogo.

    1. Método de implantação: Selecione Self-managed service deployment.

    2. Registre a extensão.

      • Extension Name: Insira um nome personalizado.

      • Extension Point Event: Selecione Pre-file commit event e Pre-file deployment event.

      • Workspace for Testing: Após a configuração, teste a extensão neste workspace antes de enviá-la.

      Configure os demais parâmetros conforme solicitado.

  2. Após concluir a configuração, clique em Determine e salve e registre a extensão.

  3. Na coluna Operation da extensão criada, clique em Submit e envie para revisão.

    Nota
    • A plataforma DataWorks realiza a revisão da extensão. Esse processo geralmente leva T+3 dias úteis.

    • Para testar a extensão criada, configure o Workspace for Testing.

  4. Após a aprovação da revisão, clique em Deploy na coluna Operation para publicar a extensão.

  5. clique em Manage Extensions e acesse a página Management Center > Extension. Selecione a sua extensão e ative na coluna Enable.

Desenvolva e configure a extensão

Código de exemplo

Este código recebe mensagens enviadas pelo EventBridge, compara a data atual com feriados e datas de congelamento de rede e retorna o resultado ao DataWorks usando a operação openapi UpdateIDEEventResult.

Ambiente: Java 8 com 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;
  /**
   * Receives messages pushed by 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)) {
      // Initialize client
      Client client = dataWorksOpenApiClient.createClient();
      // Get current date
      SimpleDateFormat sdf = new SimpleDateFormat(Constants.YYYY_MM_DD);
      String now = sdf.format(System.currentTimeMillis());
      // Get 2022 holidays and network freeze dates
      List<String> holidayList = Arrays.asList(extensionParamProperties.getHolidayList().split(","));
      // Check if current date is a freeze date
      boolean isExists = holidayList.stream().anyMatch(day -> day.equals(now));
      // Prepare callback request
      UpdateIDEEventResultRequest updateIDEEventResultRequest = new UpdateIDEEventResultRequest();
      updateIDEEventResultRequest.setMessageId(jsonObj.getString("id"));
      updateIDEEventResultRequest.setExtensionCode(extensionParamProperties.getExtensionCode());
      // If freeze date, check fails
      if (isExists) {
        updateIDEEventResultRequest.setCheckResult(EventCheckEnum.FAIL.getCode());
        updateIDEEventResultRequest.setCheckResultTip("File submission is not allowed on freeze dates");
      } else {
        // If not a freeze date, check passes
        updateIDEEventResultRequest.setCheckResult(EventCheckEnum.OK.getCode());
        updateIDEEventResultRequest.setCheckResultTip(EventCheckEnum.OK.getName());
      }
      try {
        // Callback to DataWorks
        UpdateIDEEventResultResponse response = client.updateIDEEventResult(updateIDEEventResultRequest);
              // The unique ID of the request, used for 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("Other events were not filtered. Check your configuration steps.");
      }
  }
}

Implante o projeto de exemplo

  1. Prepare o ambiente e o projeto

  2. Opções de implantação

    • Implantação local: Empacote o projeto em um arquivo JAR e execute em um servidor local ou máquina Windows com Java 8 e Maven instalados usando o comando java -jar yourapp.jar.

    • Implantação na cloud: Empacote o projeto em um arquivo JAR e implante-o em um ambiente de execução, como um contêiner docker ou uma instância do Elastic Compute Service.

  3. baixe o projeto e acesse o diretório raiz e execute o seguinte comando para empacotá-lo em um arquivo JAR:

    mvn clean package -Dmaven.test.skip=true spring-boot:repackage
  4. Execute o arquivo JAR:

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

A aplicação é iniciada com sucesso, conforme a seguinte saída:

.   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: 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'

Abra http://localhost:8080/index no seu navegador. Se a página exibir "hello world!", a aplicação foi implantada com sucesso. Após a conexão com a rede, ela poderá receber mensagens do EventBridge.

Verifique os resultados

Após implantar o código e conectar-se ao EventBridge, verifique a configuração em um workspace em que a extensão esteja ativada.

Método de verificação: no editor de código, clique em Submit e envie para acionar a verificação de evento de pré-envio. Após o envio, a mensagem "Checking" é exibida. Se a verificação for aprovada, a operação prosseguirá automaticamente. Visualize os registros e o status da verificação no painel Operation checks à esquerda. clique em painel Operation checks na parte inferior do editor para visualizar detalhes como o tipo de verificação (por exemplo, Pre-submit check_Test program), o status atual e o link view details.