Los disparadores de cola de Simple Message Queue (anteriormente MNS) permiten ejecutar una función de Function Compute automáticamente cada vez que llega un mensaje a una cola. Este mecanismo se apoya en EventBridge: cuando usted crea el disparador en la consola de Function Compute, el servicio genera los flujos de eventos necesarios en EventBridge por usted. Para más información sobre los flujos de eventos, consulte Overview.
Una vez que el disparador está activo, cada mensaje que se inserta en la cola de origen provoca la ejecución de la función asociada. Los mensajes se entregan de forma individual o por lotes, según la configuración de lotes definida. Este patrón es ideal para el procesamiento de datos de streaming de extremo a extremo.
Restricciones
La cola de Simple Message Queue (anteriormente MNS) y la función de Function Compute deben estar en la misma región.
Si su cuenta de Alibaba Cloud alcanza el límite de flujos de eventos de EventBridge, no podrá crear más disparadores de cola de Simple Message Queue (anteriormente MNS). Para consultar los límites actuales, consulte Limits.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
EventBridge activado y permisos otorgados: Activate EventBridge and grant permissions to a RAM user
Una función de evento de Function Compute: Create an event function
Simple Message Queue (anteriormente MNS) activado y acceso concedido al usuario de RAM: Activate SMQ and authorize RAM users to access SMQ
Una cola creada en Simple Message Queue (anteriormente MNS): Create a queue
Paso 1: Crear un disparador
Inicie sesión en la consola de Function Compute y haga clic en la función que desea utilizar.
En la página de detalles de la función, haga clic en la pestaña Configurations. Luego, vaya a Triggers y haga clic en Create Trigger.
-
Complete la configuración del disparador. El campo clave es Invocation Method. Para más detalles, consulte Synchronous invocation y Asynchronous invocation.
Método de invocación
Comportamiento
Carga útil máxima
Cuándo usarlo
Sync Invocation
Function Compute espera a que la función devuelva un resultado antes de entregar el siguiente evento o lote
32 MB
Cuando importa el orden o el procesamiento secuencial
Async Invocation
Function Compute entrega el evento y pasa de inmediato al siguiente; la función se ejecuta en segundo plano
128 KB
Escenarios de alto throughput donde se requiere consumir eventos rápidamente
Haga clic en OK.

Para configuraciones avanzadas, como ajustes de envío, directivas de reintento y colas de mensajes no entregados, consulte Advanced features of triggers.
Una vez creado el disparador, este aparece en la pestaña Triggers. Para modificarlo o eliminarlo, consulte Gestionar disparadores.
Paso 2: (Opcional) Configurar parámetros de prueba
La función recibe los eventos de Simple Message Queue (anteriormente MNS) mediante el parámetro event, que consiste en un arreglo de objetos con formato CloudEvents. Para probar el código de su función sin enviar un mensaje real, simule el evento manualmente.
En la pestaña Code, haga clic en el ícono
junto a Test Function y seleccione Configure Test Parameters.En el panel Configure Test Parameters, haga clic en Create New Test Event o en Modify Existing Test Event. Introduzca un nombre de evento y el contenido que se muestra a continuación, y luego haga clic en OK.
Ejemplo de carga útil del parámetro event:
[
{
"id": "c2g71017-6f65-fhcf-a814-a396fc8d****",
"source": "MNS-Function-mnstrigger",
"specversion": "1.0",
"type": "mns:Queue:SendMessage",
"datacontenttype": "application/json; charset=utf-8",
"subject": "acs:mns:cn-hangzhou:164901546557****:queues/zeus",
"time": "2021-04-08T06:28:17.093Z",
"aliyunaccountid": "164901546557****",
"aliyunpublishtime": "2021-10-15T07:06:34.028Z",
"aliyunoriginalaccountid": "164901546557****",
"aliyuneventbusname": "MNS-Function-mnstrigger",
"aliyunregionid": "cn-chengdu",
"aliyunpublishaddr": "42.120.XX.XX",
"data": {
"requestId": "606EA3074344430D4C81****",
"messageId": "C6DB60D1574661357FA227277445****",
"messageBody": "TEST"
}
},
{
"id": "d2g71017-6f65-fhcf-a814-a396fc8d****",
"source": "MNS-Function-mnstrigger",
"specversion": "1.0",
"type": "mns:Queue:SendMessage",
"datacontenttype": "application/json; charset=utf-8",
"subject": "acs:mns:cn-hangzhou:164901546557****:queues/zeus",
"time": "2021-04-08T06:28:17.093Z",
"aliyunaccountid": "164901546557****",
"aliyunpublishtime": "2021-10-15T07:06:34.028Z",
"aliyunoriginalaccountid": "164901546557****",
"aliyuneventbusname": "MNS-Function-mnstrigger",
"aliyunregionid": "cn-chengdu",
"aliyunpublishaddr": "42.120.XX.XX",
"data": {
"requestId": "606EA3074344430D4C81****",
"messageId": "C6DB60D1574661357FA227277445****",
"messageBody": "TEST"
}
}
]
Referencia de campos del evento
Cada elemento del arreglo sigue la especificación CloudEvents specification.
Campos de envoltura de CloudEvents
|
Campo |
Tipo |
Ejemplo |
Descripción |
|
|
String |
|
Identificador único del evento |
|
|
String |
|
Identificador del origen del evento (nombre del bus de eventos) |
|
|
String |
|
Tipo de evento |
|
|
String |
|
ARN de la cola de origen |
|
|
String |
|
Hora en la que se insertó el mensaje en la cola (ISO 8601) |
|
|
String |
|
Versión de la especificación de CloudEvents |
|
|
String |
|
Tipo de contenido del campo |
|
|
String |
|
Región donde reside la cola |
|
|
String |
|
Identificador de la cuenta de Alibaba Cloud |
|
|
String |
|
Hora en la que EventBridge publicó el evento |
Campos de data
|
Campo |
Tipo |
Ejemplo |
Descripción |
|
|
String |
|
Identificador único de la solicitud de envío del mensaje |
|
|
String |
|
Identificador único del mensaje |
|
|
String |
|
Contenido del cuerpo del mensaje |
Paso 3: Escribir y probar la función
Después de crear el disparador, escriba el código de la función, despliéguelo y compruebe que funciona correctamente de extremo a extremo.
Escribir y desplegar el código de la función
En la pestaña Code, escriba su controlador y haga clic en Deploy Code.
A continuación se muestra un ejemplo en Node.js que ilustra cómo escribir el código de la función:
'use strict';
/*
To enable the initializer feature
please implement the initializer function as below:
exports.initializer = (context, callback) => {
console.log('initializing');
callback(null, '');
};
*/
exports.handler = (event, context, callback) => {
console.log("event: %s", event);
// Parse and process event.
callback(null, 'return result');
}
Probar la función
Utilice cualquiera de estos métodos:
Evento simulado: Si configuró un evento de prueba en el paso 2, haga clic en Test Function dentro de la pestaña Code.
Mensaje real: Inicie sesión en Simple Message Queue (formerly MNS) console, seleccione la cola de origen y haga clic en Send Message.

Una vez que se ejecute la función, consulte el resultado en Real-time Logs.

Pasos siguientes
Modificar o eliminar un disparador: Gestionar disparadores
Configurar directivas de reintento y colas de mensajes no entregados: Advanced features of triggers