DeadLetterMonitor est un outil qui traite automatiquement, selon des règles personnalisées, certaines erreurs pouvant survenir dans les architectures Pub/Sub.
Des choses comme une nouvelle tentative après un temps d'arrêt inattendu sur le consommateur, des données de référence non correctement définies dans le service de destination, une configuration manquante, etc.
Ce projet implémente un service simple de surveillance des lettres mortes qui écoute toutes les files d'attente de lettres mortes configurées et exécute un modèle de nouvelle tentative et un modèle de disjoncteur.
Il implémente un ensemble de règles simples qui permettent de définir quels messages doivent être réessayés, combien de fois et le délai entre les tentatives. Tous les messages qui ne seront pas réessayés seront supprimés ou déplacés vers un stockage « Parking » pour être traités manuellement.
Tous les messages morts traités par le moteur de surveillance sont gérés par un gestionnaire générique qui, conformément à un ensemble de règles, supprimera, réessayera ou enverra le message à un parking.
Tous les messages configurés pour être supprimés seront simplement supprimés de la file d'attente.
Tous les messages configurés pour être réessayés seront envoyés à l'échange/sujet d'origine, pour être retraités par les abonnés d'origine. Cette nouvelle tentative sera exécutée avec un délai pour garantir que les problèmes temporaires dans l'infrastructure sont déjà résolus.
Messages retardés : pour créer le délai, tous les messages à réessayer seront publiés sur un delayed exchange and queue
, c'est-à-dire simplement une file d'attente avec un paramètre TTL.
Lorsque la durée de vie du message retardé expire, le message sera automatiquement envoyé à un Delayed Deadletter exchange and queue
dotée d'un gestionnaire spécifique qui envoie immédiatement le message à la file d'attente d'origine.
Toutes les configurations sont stockées dans le fichier 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"
}
}
Propriété | Description |
---|---|
MaxRetries | Nombre maximum de tentatives par message |
Files d'attente de lettres mortes | Noms des files d'attente de lettres mortes, séparés par une virgule |
Nom d'échange différé | Nom de l'échange retardé - le nom de l'échange pour gérer les messages retardés |
NomDeLaQueueRetardée | Nom de la file d'attente retardée - le nom de la file d'attente pour recevoir les messages retardés |
DelayedDeadLetterExchangeName | Nom de l'échange de lettres mortes retardées - le nom de l'échange pour gérer les messages retardés |
DelayedDeadLetterQueueName | Nom de la file d'attente des lettres mortes retardées - le nom de la file d'attente pour recevoir les messages retardés |
Valeur du délai | Délai en secondes avant de renvoyer le message pour une nouvelle tentative. |
ParkingLotExchangeName | Nom d'échange du parking |
ParkingLotQueueName | Nom de la file d'attente du parking |
Règles | Liste des règles à implémenter dans le moteur de surveillance. Chaque règle est appliquée à l'aide d'un filtre composé d'une liste de OriginalExchange d'un MessageType et d'un DeathReason . La liste des filtres est séparée par une virgule. (ex. work.exchange1,Namespace.Abstractions.GenericEvent1,rejected1 - ce filtre appliquera la règle à un message d'Exchange work.exchange1 avec le type de message Namespace.Abstractions et un DeathReason de rejected1 ) |
Règles : Jeter | Liste des filtres de messages à supprimer. Les messages correspondant à ces critères de filtre sont automatiquement supprimés. |
Règles : réessayer | Liste des filtres de messages à réessayer jusqu'à ce que le MaxRetries soit atteint. Les messages qui correspondent à ces critères de filtre sont envoyés pour une nouvelle tentative. |
Règles : Parc | Liste des filtres de messages à parquer directement. Les messages correspondant à ces critères de filtre sont envoyés au parking. |
Le projet prend actuellement en charge Azure Service Bus et RabbitMQ, implémentés sous l'espace de noms *.Connectors
, pour spécifier le connecteur à utiliser, dans le fichier AppSettings, définissez l'option appropriée pour MessageBus ( AzureServiceBus
ou RabbitMQ
) et les paramètres associés.
Ce projet accueille les contributions et suggestions.
Veuillez consulter notre guide de contribution pour obtenir des instructions complètes sur la façon dont vous pouvez contribuer à DeadLetterMonitor.
Ce projet a adopté le code de conduite Microsoft Open Source. Pour plus d’informations, consultez la FAQ sur le code de conduite ou contactez [email protected] pour toute question ou commentaire supplémentaire.