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.
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.
-
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 .
-
clique em
e clique em Create custom event bus.Na seção Bus, insira um Custom event bus name e clique em Next step para configurar a origem do evento.
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).
-
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:
Configure basic information: Insira um nome personalizado para a regra.
-
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.
NotaSe 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.
-
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.NotaInsira 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
-
Faça logon no DataWorks console. Na região de destino, clique em no painel de navegação à esquerda. clique em Go to Open Platform e acesse a página Developer Backend.
-
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.
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
-
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.
Método de implantação: Selecione Self-managed service deployment.
-
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.
Após concluir a configuração, clique em Determine e salve e registre a extensão.
-
Na coluna Operation da extensão criada, clique em Submit e envie para revisão.
NotaA 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.
Após a aprovação da revisão, clique em Deploy na coluna Operation para publicar a extensão.
clique em Manage Extensions e acesse a página . 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
-
Prepare o ambiente e o projeto
Dependências: Java 8 ou superior, Maven.
baixe o projeto: extension-demo-deploycontroller.zip (30 KB).
-
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.
-
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 -
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.