Após a integração do ApsaraMQ for RocketMQ com o Function Compute por meio do EventBridge como fonte de eventos, um trigger do ApsaraMQ for RocketMQ (ou simplesmente trigger do RocketMQ) pode invocar a função associada. Esse recurso permite processar mensagens publicadas no ApsaraMQ for RocketMQ de forma personalizada. Este tópico descreve como criar um trigger do RocketMQ no console do Function Compute, configure os parâmetros do ponto de entrada da função e escrever e testar o código da função.
Como funciona
Ao enviar uma solicitação de criação de trigger no console do Function Compute, o serviço cria automaticamente um recurso Event stream no EventBridge com base na configuração do trigger.
Depois que o trigger é criado, você visualize as informações dele no console do Function Compute e os recursos criados automaticamente no console do EventBridge. Quando uma mensagem entra na fila da instância de origem do ApsaraMQ for RocketMQ, o Function Compute é invocado. Em cada invocação, um ou mais eventos de mensagem são enviados à função em lote, conforme sua configuração de agrupamento. Esse comportamento é ideal para cenários de processamento de dados em streaming de ponta a ponta.
Observações de uso
A instância do ApsaraMQ for RocketMQ que serve como fonte de eventos deve residir na mesma região da função do Function Compute.
Se o número de fluxos de eventos criados ultrapassar o limite máximo, não será mais possível criar triggers do RocketMQ.
Para consultar os limites de recursos envolvidos na criação de um trigger dentro de uma única conta Alibaba Cloud em uma única região, consulte Limits.
Pré-requisitos
-
EventBridge
-
Function Compute
-
ApsaraMQ for RocketMQ
Etapa 1: Criar um trigger
Faça login no console do Function Compute, localize a função que deseja gerencie e, na página de detalhes da função, clique em na aba Trigger e clique em em Create Trigger.
No painel Create Trigger, defina Trigger Type como ApsaraMQ for RocketMQ, configure os parâmetros descritos na tabela a seguir e clique em em OK.
|
Parâmetro |
Descrição |
Exemplo |
|
Name |
Insira um nome personalizado para o trigger. |
rocketmq-trigger |
|
Version or Alias |
Valor padrão: LATEST. Para crie um trigger para outra versão ou alias, primeiro alterne para essa versão ou alias no canto superior direito da página de detalhes da função. Para obter uma introdução sobre versões e aliases, consulte Versions e Aliases. |
LATEST |
|
ApsaraMQ for RocketMQ Instance |
Selecione uma instância existente do ApsaraMQ for RocketMQ. |
rmq-zky**** |
|
Topic |
Selecione um tópico da instância existente do ApsaraMQ for RocketMQ. |
topic1 |
|
Tag |
Insira uma tag de filtro de mensagens. A função é invocada apenas quando uma mensagem com essa tag de filtro é recebida. |
tag |
|
Group ID |
Crie rapidamente um group ID ou selecione um existente. Não compartilhe um group ID com um negócio existente para evitar afetar o envio e o recebimento de mensagens desse negócio. |
GID_FC_TRIGGER_**** |
|
Consumer Offset |
Selecione o consumer offset das mensagens do ApsaraMQ for RocketMQ, que corresponde à posição a partir da qual o EventBridge começa a extrair mensagens. Valores válidos: Latest Offset: consome a partir do offset mais recente. Earliest Offset: consome a partir do offset mais antigo. Timestamp: consome a partir de um timestamp especificado. |
Latest Offset |
|
Invocation Method |
Selecione como a função será invocada. Valores válidos: Sync Invocation: adequado para cenários de invocação sequencial. Um único evento ou lote invoca a função, e o próximo evento ou lote só a invoca após a invocação atual retornar um resultado. O payload máximo de um corpo de solicitação de invocação síncrona é de 32 MB. Para mais informações, consulte Synchronous invocation. Async Invocation: consome eventos rapidamente. Um único evento ou lote invoca a função, o Function Compute retorna uma resposta imediatamente e o próximo evento ou lote invoca a função. A função execute de forma assíncrona durante esse processo. O payload máximo de um corpo de solicitação de invocação assíncrona é de 128 KB. Para mais informações, consulte Asynchronous invocation. |
Sync Invocation |
Para configurações avançadas, como configuração de push, políticas de nova tentativa e filas de mensagens mortas, consulte Advanced features of triggers.
Etapa 2: (Opcional) Configure os parâmetros de entrada da função
A fonte de eventos do ApsaraMQ for RocketMQ é passada para a função como um parâmetro de entrada event. Use seu código para analisar o parâmetro event e processá-lo. É possível passar um event manualmente para a função a fim de simular um evento de trigger e verifique se o código da função está correto.
Na aba Code da página de detalhes da função, clique em no ícone
ao lado de Test Function e selecione Configure Test Parameters na lista suspensa.No painel Configure Test Parameters, selecione Create New Test Event ou Modify Existing Test Event, insira um nome de evento e o conteúdo do evento e clique em OK.
O formato do event é o seguinte.
[
{
"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"
}
}
]
A tabela a seguir descreve os parâmetros contidos no campo data. Para os parâmetros definidos na especificação CloudEvents, consulte Overview.
|
Campo |
Tipo |
Exemplo |
Descrição |
|
|
String |
TopicName |
Nome do tópico. |
|
|
Map |
Propriedades de mensagem no nível de sistema do RocketMQ. |
|
|
|
Int |
0 |
Offset mais antigo na fila. |
|
|
Boolean |
true |
Indica se existe um rastro de mensagem. |
|
|
Int |
8 |
Offset mais recente na fila. |
|
|
String |
cn-hangzhou |
Região onde a mensagem foi enviada. |
|
|
String |
systemProperties.KEYS |
Chaves usadas para filtrar a mensagem. |
|
|
Long |
1628577790396 |
Horário de início do consumo da mensagem, em milissegundos. |
|
|
String |
AC14C305069E1B28CDFA3181CDA2**** |
Chave exclusiva da mensagem. |
|
|
String |
systemProperties.TAGS |
Tags usadas para filtrar a mensagem. |
|
|
String |
MQ_INST_123456789098****_BXhFHryi |
ID da instância do ApsaraMQ for RocketMQ. |
|
|
Map |
Propriedades do usuário. |
|
|
|
String |
TEST |
Corpo da mensagem. |
Etapa 3: Escrever e testar o código da função
Após crie o trigger, escreva e teste o código da função para verifique se está correto. Na prática, quando um evento do ApsaraMQ for RocketMQ é entregue ao Function Compute por meio do EventBridge, o trigger invoca a função automaticamente.
-
Na aba Code da página de detalhes da função, escreva seu código no editor de código e clique em em Deploy.
Este tópico usa o código de função Node.js como exemplo.
'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'); } -
Teste a função.
Método 1: Se você configurou o parâmetro de entrada da função
eventpara simular a fonte de eventos, clique em em Test Function.Método 2: Faça login no console do ApsaraMQ for RocketMQ, localize o tópico da instância do ApsaraMQ for RocketMQ que deseja usar, clique em em Message Send/Receive Test e envie uma mensagem conforme solicitado.
Após a conclusão da execução, na aba Code da página de detalhes da função, clique em em Real-time Logs para visualize o resultado.