DataWorks ofrece las funciones OpenAPI, OpenEvent y Extensions. Utilice estas tres capacidades abiertas para implementar un control y una respuesta personalizados en flujos de trabajo específicos. Este tema muestra cómo configurar la plataforma abierta mediante un escenario de negocio: controlar el despliegue de tareas durante un periodo de congelación de red al enviar un evento de nodo de despliegue en la página Data Development.
Para consultar la descripción general de las funciones de la plataforma abierta y los conceptos básicos que se usan en esta práctica, consulte OpenEvent overview y Extensions overview.
Descripción del escenario
Configuración de la suscripción
Al configurar una suscripción, especifique el tipo de evento como confirmación de archivo o despliegue de archivo mediante una regla de eventos.
En espacios de trabajo de modo estándar: dataworks:FileChange:CommitFile.
En espacios de trabajo de modo básico: dataworks:FileChange:DeployFile.
Procedimiento
Paso 1: Configurar un bus de eventos personalizado
Para conocer los pasos detallados sobre cómo habilitar y configurar suscripciones de mensajes, consulte Enable message subscriptions. A continuación se describen los pasos de configuración principales y las consideraciones clave de esta práctica.
-
Inicie sesión en la consola de EventBridge. En el panel de navegación izquierdo, haga clic en Event Bus para ir a la página de creación del bus de eventos.
Si aún no ha activado EventBridge, activate EventBridge and grant permissions .
-
Haga clic en el botón
y luego en Create custom event bus.En la sección Bus, introduzca un Custom event bus name y haga clic en Next step para configurar el origen del evento.
Haga clic en Skip para omitir la configuración de las secciones Event source, Rule y Target. Introduzca una Description. Los pasos 2 (Event source), 3 (Rule) y 4 (Target) se pueden omitir.
-
En el panel de navegación izquierdo, haga clic en Event Bus para volver a la lista de buses de eventos. Busque su bus de eventos personalizado y haga clic en su nombre para ir a la página de descripción general.
Haga clic en Event Rules en el panel de navegación izquierdo para ir a la página de reglas de eventos. Luego, haga clic en Create Rule para crear una nueva regla de eventos.
-
En esta práctica se configura el bus personalizado de EventBridge para recibir eventos de confirmación y despliegue de archivos de DataWorks. La configuración de demostración y los parámetros clave son los siguientes.
Configure basic information: introduzca un nombre de regla personalizado.
-
Configure event pattern:
Event source type: seleccione Custom event source.
Event source: deje este campo vacío.
-
Pattern content: escriba el patrón en formato JSON como se muestra a continuación. Este ejemplo utiliza un espacio de trabajo de modo estándar.
NotaSi utiliza un espacio de trabajo de modo básico, establezca el valor en dataworks:FileChange:DeployFile.
{ "source": [ "acs.dataworks" ], "type": [ "dataworks:FileChange:CommitFile" ] }source: especifica el identificador del producto como acs.dataworks.
type: especifica el tipo de evento dentro del producto como dataworks:FileChange:CommitFile.
Test event pattern: actualice los valores de source y type, y pruebe el evento. Una vez que la prueba finalice correctamente, haga clic en Next. Haga clic en Test. Si la página muestra "Match succeeded. The event can be triggered normally", el patrón de eventos se configuró correctamente.
-
Configure event target.
Service Type: seleccione HTTPS o HTTP. Para conocer más tipos de servicio, consulte Manage event rules.
-
URL: introduzca la URL que recibe los mensajes enviados desde el bus de eventos personalizado, por ejemplo:
https://server address:port/extensions/consumer.NotaIntroduzca la dirección del servidor donde se desplegó su extensión.
Body: seleccione Complete event.
Network type: seleccione Internet.
Paso 2: Configurar un canal de distribución de eventos
-
Inicie sesión en la consola de DataWorks. En la región de destino, haga clic en en el panel de navegación izquierdo. Haga clic en Go to Open Platform para abrir la página Developer Backend.
-
En la página Developer Backend, haga clic en OpenEvent en el panel de navegación izquierdo. En la página que aparece, haga clic en Add Event Distribution Channel y configure los ajustes en el cuadro de diálogo.
Workspace for Event Distribution: seleccione un espacio de trabajo que haya creado.
Custom Bus in Eventbridge for Distribution: seleccione el bus de eventos creado en el paso 1.
Después de guardar el canal de distribución de eventos, en la columna Operation del canal, haga clic en Enable para habilitar el nuevo canal de distribución de eventos.
Paso 3: Registrar y configurar una extensión
-
En la página Developer Backend, haga clic en Extension en el panel de navegación izquierdo. En la página que aparece, haga clic en Register Extension y configure los ajustes en el cuadro de diálogo.
Método de despliegue: seleccione Self-managed service deployment.
-
Registre la extensión.
Extension Name: introduzca un nombre personalizado.
Extension Point Event: seleccione Pre-file commit event y Pre-file deployment event.
Workspace for Testing: después de la configuración, puede probar la extensión en este espacio de trabajo antes de enviarla.
Configure los demás parámetros según las indicaciones.
Una vez completada la configuración, haga clic en Determine para guardar y registrar la extensión.
-
En la columna Operation de la extensión creada, haga clic en Submit para enviar la extensión a revisión.
NotaLa revisión de la extensión la realiza la plataforma DataWorks. Por lo general, este proceso tarda T+3 días hábiles en completarse.
Para probar la extensión creada, configure Workspace for Testing.
Una vez aprobada la revisión, haga clic en Deploy en la columna Operation para poner la extensión en línea.
Haga clic en Manage Extensions para ir a la página . Seleccione su extensión y habilítela en la columna Enable.
Desarrollar y configurar la extensión
Código de ejemplo
Este código recibe los mensajes enviados por EventBridge, compara la fecha actual con los días festivos y las fechas de congelación de red, y devuelve el resultado a DataWorks mediante la operación de API UpdateIDEEventResult.
Entorno: Java 8 con 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.");
}
}
}
Desplegar el proyecto de ejemplo
-
Prepare el entorno y el proyecto.
Dependencias: Java 8 o posterior, Maven.
Enlace de descarga del proyecto: extension-demo-deploycontroller.zip (30 KB).
-
Opciones de despliegue.
Despliegue local: empaquete el proyecto en un archivo JAR y ejecútelo en un servidor local o en una computadora con Windows que tenga instalado Java 8 y Maven. Use el comando
java -jar yourapp.jar.Despliegue en la nube: empaquete el proyecto en un archivo JAR y despliéguelo en un entorno de ejecución, como un contenedor Docker o una instancia de Elastic Compute Service.
-
Después de descargar el proyecto, vaya al directorio raíz y ejecute el siguiente comando para empaquetarlo en un archivo JAR.
mvn clean package -Dmaven.test.skip=true spring-boot:repackage -
Ejecute el archivo JAR:
java -jar target/extension-demo-deploycontroller-1.0.jar
La aplicación se inicia correctamente, como se muestra en el siguiente resultado:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: 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 en su navegador. Si ve "hello world!", la aplicación se desplegó correctamente. Después de conectarse a la red, podrá recibir mensajes de EventBridge.
Comprobar los resultados
Después de desplegar el código y conectarse a EventBridge, compruebe la configuración en un espacio de trabajo donde la extensión esté habilitada.
Método de comprobación: en el editor de código, haga clic en Submit para activar la verificación del evento previo al envío. Tras el envío, aparece un mensaje de "Checking". Si la verificación es correcta, la operación continúa automáticamente. Consulte los registros y el estado de la verificación en el panel Operation checks de la izquierda. Haga clic en el panel Operation checks en la parte inferior del editor para ver detalles como el tipo de verificación (por ejemplo, Pre-submit check_Test program), el estado actual y el enlace view details.