Se o consumo de uma mensagem falhar, o sistema acionará automaticamente uma nova tentativa. Caso a mensagem ainda não seja consumida após atingir o número máximo de tentativas, ela se tornará uma mensagem dead-letter. O ApsaraMQ for RocketMQ permite armazenar essas mensagens em um tópico específico para recuperação posterior do negócio ou análise retrospectiva. Este tópico descreve os cenários, as políticas de dead-letter, os limites, os métodos de configuração e as notas de uso para mensagens dead-letter.
Cenários
-
Cenário típico de tratamento de mensagens dead-letter
Após a falha nas novas tentativas de envio, armazene as mensagens dead-letter em um tópico dedicado. Crie um grupo de consumidores separado para consumir e processar essas mensagens, permitindo o tratamento de caminhos de erro ou a análise de dead-letters.
-
Uso incorreto comum de mensagens dead-letter
Se você rotear mensagens dead-letter por várias camadas ou devolvê-las ao tópico original, elas poderão entrar novamente no ciclo de tentativas. Isso pode desencadear um efeito avalanche.
Política de dead-letter
Quando as mensagens se tornam dead-letters
Se uma mensagem não for consumida com sucesso após atingir o limite máximo de tentativas, ela deixará de ser entregue e passará à condição de dead-letter.

Regras de retenção de mensagens dead-letter
ApsaraMQ for RocketMQ Por padrão, as mensagens dead-letter não são retidas e são descartadas assim que entram nesse estado.
É possível ativar a retenção de mensagens dead-letter no console. Após a ativação, essas mensagens ficam armazenadas em um tópico específico, denominado tópico dead-letter. Para mais detalhes, consulte Configurar regras de retenção de mensagens dead-letter.
As mensagens dead-letter são armazenadas no tópico correspondente como novas mensagens. Suas propriedades sofrem as seguintes alterações:
ID da mensagem: Um novo ID é gerado quando a mensagem dead-letter é salva no tópico.
Atributos definidos pelo usuário, corpo da mensagem e outras informações fornecidas permanecem inalterados.
O período de retenção começa a contar a partir do momento em que a mensagem entra no tópico dead-letter. Por exemplo, se uma mensagem for enviada ao servidor às 13:00:00 e falhar no consumo e nas tentativas duas horas depois (às 15:00:00), seu período de retenção terá início às 15:00:00.
Limites
O tópico dead-letter deve ser um tópico de mensagens normais ou ordenadas. Tópicos de mensagens transacionais ou agendadas não podem funcionar como tópicos dead-letter.
Não utilize o tópico da mensagem original como tópico dead-letter (para evitar ciclos de tentativa e efeitos avalanche). Caso o sistema detecte essa coincidência durante a transferência, a mensagem será descartada.
Mensagens dead-letter provenientes de diferentes tópicos podem ser armazenadas no mesmo tópico dead-letter.
A exclusão de um grupo de consumidores não remove o tópico dead-letter associado.
Se um tópico estiver referenciado em uma política de dead-letter, remova essa política antes de excluir o tópico.
Configure regras de retenção de mensagens dead-letter
Defina se deseja reter mensagens dead-letter diretamente no console do ApsaraMQ for RocketMQ.
Para acessar essa configuração:
Na página Instances, clique em no nome da instância desejada.
No painel de navegação à esquerda, clique em Groups. Na página Groups, clique em Create Group.
Na caixa de diálogo Create Group, expanda a seção Advanced Settings para configure a Consumption Retry Policy (padrão: backoff exponencial), o Maximum Retry Count (padrão: 16) e a opção Retain Dead-letter Messages. Quando essa opção está desativada, as mensagens que ultrapassam o limite de tentativas são descartadas.
Métricas de observabilidade para mensagens dead-letter
Descrição das métricas
|
Tipo de métrica |
Métrica |
|
rocketmq_send_to_dlq_messages: Quantidade de mensagens que entram em status dead-letter por minuto |
|
|
Utilização das métricas
O ApsaraMQ for RocketMQ oferece suporte à configuração de alertas para mensagens dead-letter. Esse recurso ajuda a detectar anomalias antes que impactem o negócio e a identificar a origem do problema por meio da revisão das métricas no Dashboard.
-
Cenário 1: Visualize a quantidade de mensagens que entram em status dead-letter por minuto
No Dashboard, verifique o indicador de Messages entering dead-letter status per minute. Também é possível usar o Cloud Monitor para crie um alerta referente a Messages entering dead-letter status per minute (GroupId & Topic).
-
Cenário 2: Verificar quantas mensagens dead-letter permanecem sem processamento
Depois que as mensagens dead-letter forem armazenadas no tópico designado, visualize a métrica Consumption backlog desse tópico no Dashboard. Alternativamente, utilize o Cloud Monitor para configure um alerta de Message backlog (GroupId & Topic).
Melhores práticas
Como os consumidores podem recuperar informações do tópico original
-
Opção 1: Estabeleça uma relação um para um entre cada tópico dead-letter e seu tópico original.
Por exemplo, se o tópico original for testTopic, nomeie o tópico dead-letter como DLQ-testTopic.
-
Opção 2: Inclua o nome do tópico original em um atributo personalizado da mensagem. Exemplo:
messageBuilder.addProperty("originalTopic","testTopic")
Separe o processamento de dead-letters da lógica principal de negócios
Mensagens dead-letter são aquelas que falharam mesmo após as tentativas nos fluxos normais de negócios. Trate-as separadamente para não interromper as operações regulares.
O tópico dead-letter deve ser diferente do tópico da mensagem original. Reutilizar o tópico original pode fazer com que as mensagens dead-letter retornem ao ciclo de consumo, bloqueando grupos de consumidores normais e provocando um efeito avalanche.
Evite usar grupos de consumidores do fluxo principal de produção para processar mensagens dead-letter. Essa prática pode interferir no processamento normal das mensagens.