DeadLetterMonitor es una herramienta que soluciona automáticamente, según reglas personalizadas, algunos errores que pueden ocurrir en las arquitecturas Pub/Sub.
Cosas como reintentar después de un tiempo de inactividad inesperado en el consumidor, datos de referencia que no se configuran correctamente en el servicio de destino, falta de configuración, etc.
Este proyecto implementa un servicio simple de Monitor de mensajes fallidos que escucha todas las colas de mensajes fallidos configuradas y ejecuta un patrón de reintento y un patrón de disyuntor.
Implementa un conjunto de reglas simples que permiten definir qué mensajes deben reintentarse, cuántas veces y el retraso entre reintentos. Todos los mensajes que no se vuelvan a intentar se eliminarán o se trasladarán a un almacenamiento de "Estacionamiento" para procesarlos manualmente.
Todos los mensajes fallidos procesados por el motor de monitoreo son manejados por un controlador genérico que, de acuerdo con un conjunto de reglas, descartará, reintentará o enviará el mensaje a un estacionamiento.
Todos los mensajes configurados para ser descartados simplemente se eliminarán de la cola.
Todos los mensajes configurados para ser reintentados se enviarán al intercambio/tema original, para que los suscriptores originales los reprocesen. Este reintento se ejecutará utilizando un retraso para garantizar que los problemas temporales en la infraestructura ya estén solucionados.
Mensajes retrasados : para crear el retraso, todos los mensajes para reintentar se publicarán en un delayed exchange and queue
, que es solo una cola con una configuración TTL.
Cuando el TTL del mensaje retrasado caduque, el mensaje se enviará automáticamente a un Delayed Deadletter exchange and queue
que tiene un controlador específico que envía inmediatamente el mensaje a la cola original.
Todas las configuraciones se almacenan en el archivo 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"
}
}
Propiedad | Descripción |
---|---|
MaxRetries | Número máximo de reintentos por mensaje |
colas de letras muertas | Nombres de colas de mensajes fallidos, separados por comas |
Nombre de intercambio retrasado | Nombre del intercambio retrasado: el nombre del intercambio para manejar los mensajes retrasados. |
Nombre de cola retrasada | Nombre de la cola retrasada: el nombre de la cola para recibir mensajes retrasados |
Nombre de intercambio de letras muertas retrasado | Carta fallida retrasada Nombre del intercambio: el nombre del intercambio para manejar los mensajes retrasados |
Nombre de cola de letra muerta retrasada | Carta muerta retrasada Nombre de la cola: el nombre de la cola para recibir mensajes retrasados |
Valor de retraso | Tiempo en segundos de retraso antes de enviar el mensaje para reintentarlo. |
EstacionamientoNombreIntercambio | Nombre de intercambio de estacionamiento |
Nombre De La Cola Del Estacionamiento | Nombre de la cola del estacionamiento |
Normas | Lista de reglas a implementar en Monitor Engine. Cada regla se aplica utilizando un filtro compuesto por una lista de OriginalExchange , MessageType y DeathReason . La lista de filtros está separada por comas. (por ejemplo, work.exchange1,Namespace.Abstractions.GenericEvent1,rejected1 : este filtro aplicará la regla a un mensaje de Exchange work.exchange1 con un tipo de mensaje de Namespace.Abstractions y un DeathReason de rejected1 ). |
Reglas: Descartar | Lista de filtros de mensajes para descartar. Los mensajes que coinciden con este criterio de filtro se eliminan automáticamente. |
Reglas: reintentar | Lista de filtros de mensajes que se reintentarán hasta que se alcance MaxRetries . Los mensajes que coinciden con este criterio de filtro se envían para reintentar. |
Reglas: Parque | Lista de filtros de mensajes para aparcar directamente. Los mensajes que coinciden con este criterio de filtro se envían al estacionamiento. |
Actualmente, el proyecto admite Azure Service Bus y RabbitMQ, implementados en el espacio de nombres *.Connectors
, para especificar qué conector usar, en el archivo AppSettings, configure la opción apropiada para MessageBus ( AzureServiceBus
o RabbitMQ
) y las configuraciones relacionadas.
Este proyecto agradece contribuciones y sugerencias.
Consulte nuestra guía de contribución para obtener instrucciones completas sobre cómo puede contribuir a DeadLetterMonitor.
Este proyecto ha adoptado el Código de conducta de código abierto de Microsoft. Para obtener más información, consulte las preguntas frecuentes sobre el Código de conducta o comuníquese con [email protected] si tiene alguna pregunta o comentario adicional.