DeadLetterMonitor é uma ferramenta que trata automaticamente, de acordo com regras customizadas, de alguns erros que podem ocorrer em Arquiteturas Pub/Sub.
Coisas como tentar novamente após um tempo de inatividade inesperado no consumidor, dados de referência não configurados corretamente no serviço de destino, configuração ausente, etc.
Este projeto implementa um serviço simples de Dead Letter Monitor que escuta todas as filas de mensagens mortas configuradas e executa um padrão de nova tentativa e um padrão de disjuntor.
Implementa um conjunto de regras simples que permite definir quais mensagens devem ser repetidas, quantas vezes e o atraso entre as tentativas. Todas as mensagens que não forem repetidas serão excluídas ou movidas para um armazenamento "Estacionamento" para serem processadas manualmente.
Todas as mensagens mortas processadas pelo mecanismo de monitoramento são tratadas por um manipulador genérico que, de acordo com um conjunto de regras, descartará, tentará novamente ou enviará a mensagem para um estacionamento.
Todas as mensagens configuradas para serem descartadas serão apenas excluídas da fila.
Todas as mensagens configuradas para serem repetidas serão enviadas para a exchange/tópico original, para serem reprocessadas pelos assinantes originais. Esta nova tentativa será executada com um atraso para garantir que os problemas temporários na infraestrutura já foram corrigidos.
Mensagens atrasadas : Para criar o atraso, todas as mensagens para tentar novamente serão postadas em uma delayed exchange and queue
, que é apenas uma fila com configuração TTL.
Quando o TTL da mensagem atrasada expirar, a mensagem será enviada automaticamente para uma Delayed Deadletter exchange and queue
que possui um manipulador específico que envia imediatamente a mensagem para a fila original.
Todas as configurações são armazenadas no arquivo appsettings.json
.
"DeadLetterMonitor": {
"MaxRetries": 2,
"DeadLetterQueues": "deadletter.queue",
"DelayedExchangeName": "delayed.exchange",
"DelayedQueueName": "delayed.queue",
"DelayedDeadLetterExchangeName": "delayed.deadletter.exchange",
"DelayedDeadLetterQueueName": "delayed.deadletter.queue",
"ParkingLotExchangeName": "parkinglot.exchange",
"ParkingLotQueueName": "parkinglot.queue",
"DelayValue": 10000,
"Rules": {
"Discard": "work.exchange1,Namespace.Abstractions.GenericEvent1,rejected1",
"Retry": "work.exchange,Namespace.Abstractions.GenericEvent,rejected",
"Park": "work.exchange1,Namespace.Abstractions.GenericEvent1,rejected1"
}
}
Propriedade | Descrição |
---|---|
MaxRetentativas | Número máximo de tentativas por mensagem |
DeadLetterQueues | Nomes de filas de mensagens mortas, separados por vírgula |
DelayedExchangeName | Nome da troca atrasada - o nome da troca para lidar com mensagens atrasadas |
DelayedQueueName | Nome da fila atrasada - o nome da fila para receber mensagens atrasadas |
DelayedDeadLetterExchangeName | Nome da troca de mensagens mortas atrasadas - o nome da troca para lidar com mensagens atrasadas |
DelayedDeadLetterQueueName | Nome da fila de mensagens mortas atrasadas - o nome da fila para receber mensagens atrasadas |
Valor de atraso | Tempo em segundos de atraso antes de enviar a mensagem de volta para nova tentativa. |
ParkingLotExchangeName | Nome de troca de estacionamento |
ParkingLotQueueName | Nome da fila do estacionamento |
Regras | Lista de regras a serem implementadas no mecanismo de monitoramento. Cada regra é aplicada usando um filtro composto por uma lista de OriginalExchange MessageType e DeathReason . A lista de filtros é separada por vírgula. (ex. work.exchange1,Namespace.Abstractions.GenericEvent1,rejected1 - este filtro aplicará a regra a uma mensagem do Exchange work.exchange1 com tipo de mensagem Namespace.Abstractions e um DeathReason rejected1 ) |
Regras: Descartar | Lista de filtros de mensagens a serem descartadas. As mensagens que correspondem a estes critérios de filtro são excluídas automaticamente. |
Regras: Tentar novamente | Lista de filtros de mensagens a serem repetidas até que MaxRetries seja atingido. As mensagens que correspondem a esses critérios de filtro são enviadas para nova tentativa. |
Regras: Parque | Lista de filtros de mensagens a serem estacionadas diretamente. As mensagens que atendem a esse critério de filtro são enviadas para o estacionamento. |
O projeto atualmente suporta Azure Service Bus e RabbitMQ, implementados no namespace *.Connectors
, para especificar qual conector usar, no arquivo AppSettings, defina a opção apropriada para MessageBus ( AzureServiceBus
ou RabbitMQ
) e as configurações relacionadas.
Este projeto aceita contribuições e sugestões.
Consulte nosso guia de contribuição para obter instruções completas sobre como você pode contribuir para o DeadLetterMonitor.
Este projeto adotou o Código de Conduta de Código Aberto da Microsoft. Para obter mais informações, consulte as Perguntas frequentes sobre o Código de Conduta ou entre em contato com [email protected] com perguntas ou comentários adicionais.