Una vez que ApsaraMQ for RocketMQ se integra con Function Compute mediante EventBridge como origen de eventos, un trigger de ApsaraMQ for RocketMQ (o trigger de RocketMQ) invoca la función asociada. Esta función le permite procesar los mensajes publicados en ApsaraMQ for RocketMQ de forma personalizada. En este tema se describe cómo crear un trigger de RocketMQ en la consola de Function Compute, configurar los parámetros del punto de entrada de la función y escribir y probar el código de la función.
Funcionamiento
Cuando usted envía una solicitud de creación de trigger en la consola de Function Compute, el servicio crea automáticamente un recurso Event stream en EventBridge a partir de la configuración del trigger.
Una vez creado el trigger, puede consultar su información en la consola de Function Compute y revisar los recursos generados automáticamente en la consola de EventBridge. Cuando un mensaje entra en la cola de la instancia de ApsaraMQ for RocketMQ de origen, se invoca Function Compute. En cada invocación, uno o más eventos de mensaje se envían a la función en un lote, según la configuración de lotes establecida. Este comportamiento es ideal para escenarios de procesamiento de datos de streaming de extremo a extremo.
Notas de uso
La instancia de ApsaraMQ for RocketMQ que actúa como origen de eventos debe ubicarse en la misma región que la función de Function Compute.
Si la cantidad de flujos de eventos creados supera el límite máximo, ya no podrá crear triggers de RocketMQ.
Para conocer los límites de los recursos involucrados al crear un trigger dentro de una sola cuenta de Alibaba Cloud en una única región, consulte Limits.
Requisitos previos
-
EventBridge
-
Function Compute
-
ApsaraMQ for RocketMQ
Paso 1: Crear un trigger
Inicie sesión en la consola de Function Compute, busque la función que desea gestionar y, en la página de detalles de la función, haga clic en la pestaña Trigger y luego en Create Trigger.
En el panel Create Trigger, establezca Trigger Type en ApsaraMQ for RocketMQ, configure los parámetros descritos en la tabla a continuación y haga clic en OK.
|
Parámetro |
Descripción |
Ejemplo |
|
Name |
Introduzca un nombre personalizado para el trigger. |
rocketmq-trigger |
|
Version or Alias |
Valor predeterminado: LATEST. Para crear un trigger para otra versión o alias, primero cambie a esa versión o alias en la esquina superior derecha de la página de detalles de la función. Para obtener una introducción a las versiones y los alias, consulte Versions y Aliases. |
LATEST |
|
ApsaraMQ for RocketMQ Instance |
Seleccione una instancia de ApsaraMQ for RocketMQ existente. |
rmq-zky**** |
|
Topic |
Seleccione un topic de la instancia de ApsaraMQ for RocketMQ existente. |
topic1 |
|
Tag |
Introduzca una etiqueta de filtro de mensajes. La función se invoca únicamente cuando se recibe un mensaje que contiene esta etiqueta de filtro. |
tag |
|
Group ID |
Cree rápidamente un identificador de grupo o seleccione uno existente. No comparta un identificador de grupo con un negocio existente, para evitar afectar el envío y la recepción de mensajes de dicho negocio. |
GID_FC_TRIGGER_**** |
|
Consumer Offset |
Seleccione el desplazamiento de consumo de los mensajes de ApsaraMQ for RocketMQ, es decir, la posición desde la cual EventBridge comienza a extraer mensajes. Valores válidos: Latest Offset: consume desde el desplazamiento más reciente. Earliest Offset: consume desde el desplazamiento más antiguo. Timestamp: consume desde una marca de tiempo específica. |
Latest Offset |
|
Invocation Method |
Seleccione la forma en que se invoca la función. Valores válidos: Sync Invocation: adecuada para escenarios de invocación secuencial. Un evento individual o un lote invoca la función, y el siguiente evento o lote la invoca solo después de que la invocación actual devuelve un resultado. La carga útil máxima del cuerpo de una solicitud de invocación síncrona es de 32 MB. Para obtener más información, consulte Synchronous invocation. Async Invocation: consume eventos rápidamente. Un evento individual o un lote invoca la función, Function Compute devuelve una respuesta de inmediato y el siguiente evento o lote invoca la función. Durante este proceso, la función se ejecuta de forma asíncrona. La carga útil máxima del cuerpo de una solicitud de invocación asíncrona es de 128 KB. Para obtener más información, consulte Asynchronous invocation. |
Sync Invocation |
Para configuraciones avanzadas, como la configuración de envío, las directivas de reintento y las colas de mensajes no entregados, consulte Advanced features of triggers.
Paso 2: (Opcional) Configurar los parámetros de entrada de la función
El origen de eventos de ApsaraMQ for RocketMQ se pasa a la función como el parámetro de entrada event. Utilice su código para analizar sintácticamente el parámetro event y procesarlo. También puede pasar un event a la función de forma manual para simular un evento de trigger y comprobar si el código de la función es correcto.
En la pestaña Code de la página de detalles de la función, haga clic en el ícono
junto a Test Function y seleccione Configure Test Parameters en la lista desplegable.En el panel Configure Test Parameters, seleccione Create New Test Event o Modify Existing Test Event, introduzca un nombre de evento y su contenido, y luego haga clic en OK.
El formato de event es el siguiente.
[
{
"id":"94ebc15f-f0db-4bbe-acce-56fb72fb****",
"source":"RocketMQ-Function-rocketmq-trigger",
"specversion":"1.0",
"type":"mq:Topic:SendMessage",
"datacontenttype":"application/json; charset=utf-8",
"subject":"acs:mq:cn-hangzhou:164901546557****:MQ_INST_164901546557****_BXhFHryi%TopicName",
"time":"2021-04-08T06:01:20.766Z",
"aliyunaccountid":"164901546557****",
"aliyunpublishtime":"2021-10-15T02:05:16.791Z",
"aliyunoriginalaccountid":"164901546557****",
"aliyuneventbusname":"RocketMQ-Function-rocketmq-trigger",
"aliyunregionid":"cn-chengdu",
"aliyunpublishaddr":"42.120.XX.XX",
"data":{
"topic":"TopicName",
"systemProperties":{
"MIN_OFFSET":"0",
"TRACE_ON":"true",
"MAX_OFFSET":"8",
"MSG_REGION":"cn-hangzhou",
"KEYS":"systemProperties.KEYS",
"CONSUME_START_TIME":1628577790396,
"TAGS":"systemProperties.TAGS",
"INSTANCE_ID":"MQ_INST_164901546557****_BXhFHryi"
},
"userProperties":{
},
"body":"TEST"
}
},
{
"id":"94ebc15f-f0db-4bbe-acce-56fb72fb****",
"source":"RocketMQ-Function-rocketmq-trigger",
"specversion":"1.0",
"type":"mq:Topic:SendMessage",
"datacontenttype":"application/json; charset=utf-8",
"subject":"acs:mq:cn-hangzhou:164901546557****:MQ_INST_164901546557****_BXhFHryi%TopicName",
"time":"2021-04-08T06:01:20.766Z",
"aliyunaccountid":"164901546557****",
"aliyunpublishtime":"2021-10-15T02:05:16.791Z",
"aliyunoriginalaccountid":"164901546557****",
"aliyuneventbusname":"RocketMQ-Function-rocketmq-trigger",
"aliyunregionid":"cn-chengdu",
"aliyunpublishaddr":"42.120.XX.XX",
"data":{
"topic":"TopicName",
"systemProperties":{
"MIN_OFFSET":"0",
"TRACE_ON":"true",
"MAX_OFFSET":"8",
"MSG_REGION":"cn-hangzhou",
"KEYS":"systemProperties.KEYS",
"CONSUME_START_TIME":1628577790396,
"TAGS":"systemProperties.TAGS",
"INSTANCE_ID":"MQ_INST_164901546557****_BXhFHryi"
},
"userProperties":{
},
"body":"TEST"
}
}
]
La tabla a continuación describe los parámetros contenidos en el campo data. Para los parámetros definidos en la especificación CloudEvents, consulte Overview.
|
Campo |
Tipo |
Ejemplo |
Descripción |
|
|
String |
TopicName |
El nombre del topic. |
|
|
Map |
Propiedades de mensaje a nivel de sistema de RocketMQ. |
|
|
|
Int |
0 |
El desplazamiento más antiguo en la cola. |
|
|
Boolean |
true |
Indica si existe un rastreo del mensaje. |
|
|
Int |
8 |
El desplazamiento más reciente en la cola. |
|
|
String |
cn-hangzhou |
La región donde se envió el mensaje. |
|
|
String |
systemProperties.KEYS |
Claves utilizadas para filtrar el mensaje. |
|
|
Long |
1628577790396 |
Hora de inicio del consumo del mensaje, en milisegundos. |
|
|
String |
AC14C305069E1B28CDFA3181CDA2**** |
La clave única del mensaje. |
|
|
String |
systemProperties.TAGS |
Etiquetas utilizadas para filtrar el mensaje. |
|
|
String |
MQ_INST_123456789098****_BXhFHryi |
El identificador de la instancia de ApsaraMQ for RocketMQ. |
|
|
Map |
Las propiedades del usuario. |
|
|
|
String |
TEST |
El cuerpo del mensaje. |
Paso 3: Escribir y probar el código de la función
Después de crear el trigger, escriba y pruebe el código de la función para comprobar que sea correcto. En la práctica, cuando un evento de ApsaraMQ for RocketMQ se entrega a Function Compute a través de EventBridge, el trigger invoca automáticamente la función.
-
En la pestaña Code de la página de detalles de la función, escriba su código en el editor y haga clic en Deploy.
Este tema utiliza código de función en Node.js como ejemplo.
'use strict'; /* To enable the initializer feature, implement the initializer function as follows: exports.initializer = (context, callback) => { console.log('initializing'); callback(null, ''); }; */ exports.handler = (event, context, callback) => { console.log("event: %s", event); // Parse the event parameter and process the event. callback(null, 'return result'); } -
Pruebe la función.
Método 1: Si configuró el parámetro de entrada de la función
eventpara simular el origen de eventos, haga clic en Test Function.Método 2: Inicie sesión en la consola de ApsaraMQ for RocketMQ, busque el topic de la instancia de ApsaraMQ for RocketMQ que desea utilizar, haga clic en Message Send/Receive Test y envíe un mensaje siguiendo las indicaciones.
Una vez finalizada la ejecución, vaya a la pestaña Code de la página de detalles de la función y haga clic en Real-time Logs para consultar el resultado.