Fila de Mensagens Mortas para Jitterbit Message Queue
Visão Geral
Esta página descreve como implementar um padrão de design de Fila de Mensagens Mortas (DLQ) usando o Serviço de Fila de Mensagens Jitterbit e o conector Jitterbit MQ.
Um padrão DLQ roteia mensagens que não podem ser processadas com sucesso através de uma série de filas de tentativa com atrasos crescentes antes de colocá-las em uma DLQ final para inspeção manual.
Limitações de NACK e reprocessamento
Um padrão comum de integração é usar a atividade NACK com a opção Reprocessar Mensagens Após NACK para retornar uma mensagem à fila quando o processamento falha. Por exemplo, uma integração de faturamento de pedidos pode consultar um sistema ERP repetidamente até que um pedido atinja o status esperado.
Essa abordagem tem duas desvantagens significativas quando usada com filas Quorum:
- Mensagens que não podem ser processadas imediatamente são retornadas ao início da fila e tentadas continuamente, consumindo recursos de processamento.
- Filas Quorum impõem um limite de entrega de 20 tentativas. Após uma mensagem ser negativamente reconhecida 20 vezes, ela é removida permanentemente da fila sem uma mensagem de erro.
O padrão DLQ usa a atividade NACK com a opção Rejeitar Mensagens Após NACK em vez disso, e implementa um roteamento explícito para um conjunto de filas de tentativa com atrasos crescentes, conforme descrito nas seções a seguir.
Visão Geral do Padrão
O padrão DLQ utiliza múltiplas filas e um conjunto de operações do Studio:
- Mensagens são processadas a partir de uma fila principal.
- Em caso de falha, a mensagem é rejeitada (não reprocessada) e enviada para a primeira fila de tentativa com um valor
retryCountincrementado na carga útil. - Uma operação agendada lê de cada fila de tentativa após seu intervalo de atraso e encaminha mensagens de volta para a fila principal para reprocessamento.
- Após um número máximo de tentativas configurável, as mensagens são enviadas para a DLQ para inspeção manual.
Configuração da fila
Crie as cinco filas a seguir na página Filas de mensagens do Console de Gerenciamento. Todas as filas devem usar o tipo Quorum para durabilidade.
Dica
Adapte os nomes das filas e o número de níveis de tentativa de acordo com sua integração.
| Nome da fila | Propósito | TTL de Mensagem Sugerido |
|---|---|---|
orders.main |
Fila de processamento principal | — |
orders.retry.1m |
Primeira tentativa (atraso de 1 minuto) | 3.600.000 ms |
orders.retry.5m |
Segunda tentativa (atraso de 5 minutos) | 3.600.000 ms |
orders.retry.30m |
Terceira tentativa (atraso de 30 minutos) | 3.600.000 ms |
orders.dlq |
Fila final para inspeção manual | 864.000.000 ms |
Nota
Os valores de TTL de Mensagem acima são uma salvaguarda que impede que as mensagens se acumulem indefinidamente se uma operação falhar ao processá-las. O atraso entre as tentativas é controlado pela frequência com que as operações do encaminhador de tentativas são executadas, e não pelo TTL.
Requisitos do payload da mensagem
Para rastrear tentativas de processamento com falha, adicione um campo retryCount (um inteiro começando em 0) ao seu payload de mensagem. Em cada tentativa de processamento com falha, configure a operação do processador principal para realizar os seguintes passos:
-
Leia
retryCountdo campomessageBodyno esquema de resposta da Obter atividade. -
Incremente o valor usando um script ou transformação.
-
Escreva o valor atualizado de volta pelo campo
messageBodyno esquema de solicitação da Enviar atividade ao direcionar para a fila de tentativas.
Nota
O campo retryCount no payload é o único mecanismo para rastrear o histórico de tentativas. Use um nome de campo consistente e de nível superior em todas as operações.
Exemplo de carga útil
{
"orderId": "ORD-12345",
"retryCount": 0
}
Design do fluxo de trabalho
Operação do processador principal
Configure esta operação para ler de orders.main e tentar processar cada mensagem.
-
Use a Atividade de Obtenção para recuperar uma mensagem de
orders.main. -
Tente processar a mensagem (por exemplo, consulte o sistema ERP para o status esperado do pedido).
-
Use ações da operação para configurar as seguintes ações:
-
Em Caso de Sucesso: Execute uma operação que utilize a Atividade de Reconhecimento para reconhecer a mensagem.
-
Em Caso de Falha: Execute uma operação que realize os seguintes passos:
- Leia
retryCountda carga útil da mensagem e incremente em1. -
Use a Atividade de Envio para enviar a mensagem atualizada para a fila de retry apropriada:
Valor de retryCountFila de Destino 1orders.retry.1m2orders.retry.5m3ou4orders.retry.30mMaior que 4orders.dlq -
Use a Atividade NACK com Rejeitar Mensagens Após NACK para remover a mensagem de
orders.main.
- Leia
-
Importante
A Atividade de Envio para a fila de retry deve ser concluída antes de executar a Atividade NACK. Esta ordem garante que a mensagem não seja perdida se a Atividade de Envio falhar.
Operações do encaminhador de retry
Crie uma operação de encaminhador para cada fila de retry. Configure cada operação para ler mensagens de sua fila de retry, enviá-las de volta para orders.main para reprocessamento e executar em um cronograma que corresponda ao atraso pretendido:
| Operação | Fila de origem | Cronograma |
|---|---|---|
| Encaminhador de retry 1m | orders.retry.1m |
A cada 1 minuto |
| Encaminhador de retry 5m | orders.retry.5m |
A cada 5 minutos |
| Encaminhador de retry 30m | orders.retry.30m |
A cada 30 minutos |
Configure cada operação para seguir estas etapas:
-
Use a Atividade de obter para recuperar uma mensagem da fila de retry.
-
Use a Atividade de enviar para enviar a mensagem para
orders.main, preservando o valor deretryCountno payload. -
Use a Atividade de reconhecer para reconhecer a mensagem da fila de retry.
Nota
Para informações sobre agendamento de operações, veja cronogramas de operações.
Operação do inspetor de DLQ (opcional)
Crie uma operação que leia de orders.dlq para alertar ou registrar mensagens que esgotaram todas as tentativas de retry. Esta operação pode enviar notificações por email, escrever em um log ou acionar um fluxo de trabalho de revisão manual.
Nota
Mensagens em orders.dlq requerem intervenção manual. Configure notificações por email para alertar sua equipe quando mensagens chegarem.