DeadLetterMonitor ist ein Tool, das einige Fehler, die in Pub/Sub-Architekturen auftreten können, automatisch nach benutzerdefinierten Regeln behandelt.
Dinge wie ein erneuter Versuch nach einer unerwarteten Ausfallzeit beim Verbraucher, nicht ordnungsgemäß festgelegte Referenzdaten im Zieldienst, fehlende Konfiguration usw.
Dieses Projekt implementiert einen einfachen Dead Letter Monitor-Dienst, der alle konfigurierten Dead Letter Queues abhört und ein Wiederholungsmuster und ein Circuit Breaker-Muster ausführt.
Es implementiert eine Reihe einfacher Regeln, mit denen definiert werden kann, welche Nachrichten wie oft wiederholt werden sollen und wie lange es zwischen den Wiederholungsversuchen vergeht. Alle Nachrichten, die nicht erneut versucht werden, werden gelöscht oder zur manuellen Verarbeitung in einen „Parkplatz“-Speicher verschoben.
Alle von der Monitor-Engine verarbeiteten unzustellbaren Nachrichten werden von einem generischen Handler verarbeitet, der die Nachricht entsprechend einer Reihe von Regeln verwirft, erneut versucht oder an einen Parkplatz sendet.
Alle zum Verwerfen konfigurierten Nachrichten werden einfach aus der Warteschlange gelöscht.
Alle für die Wiederholung konfigurierten Nachrichten werden an den ursprünglichen Austausch/das ursprüngliche Thema gesendet, um von den ursprünglichen Abonnenten erneut verarbeitet zu werden. Dieser Wiederholungsversuch wird mit einer Verzögerung ausgeführt, um sicherzustellen, dass vorübergehende Probleme in der Infrastruktur bereits behoben sind.
Verzögerte Nachrichten : Um die Verzögerung zu erzeugen, werden alle erneut zu versuchenden Nachrichten an einen delayed exchange and queue
gesendet, bei der es sich lediglich um eine Warteschlange mit einer TTL-Einstellung handelt.
Wenn die TTL für verzögerte Nachrichten abläuft, wird die Nachricht automatisch an einen Delayed Deadletter exchange and queue
gesendet, die über einen bestimmten Handler verfügt, der die Nachricht sofort an die ursprüngliche Warteschlange sendet.
Alle Konfigurationen werden in der Datei appsettings.json
gespeichert.
"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"
}
}
Eigentum | Beschreibung |
---|---|
MaxRetries | Maximale Anzahl von Wiederholungen pro Nachricht |
DeadLetterQueues | Namen der Warteschlangen für unzustellbare Nachrichten, durch Komma getrennt |
DelayedExchangeName | Name des verzögerten Exchange – der Name des Exchange, der verzögerte Nachrichten verarbeitet |
DelayedQueueName | Name der verzögerten Warteschlange – der Name der Warteschlange zum Empfang verzögerter Nachrichten |
DelayedDeadLetterExchangeName | Name der Exchange für verzögerte unzustellbare Nachrichten – der Name der Exchange, die verspätete Nachrichten verarbeiten soll |
DelayedDeadLetterQueueName | Name der Warteschlange für verzögerte unzustellbare Nachrichten – der Name der Warteschlange zum Empfang verzögerter Nachrichten |
Verzögerungswert | Verzögerungszeit in Sekunden, bevor die Nachricht zum erneuten Versuch zurückgesendet wird. |
ParkingLotExchangeName | Name der Parkplatzbörse |
ParkingLotQueueName | Name der Parkplatzwarteschlange |
Regeln | Liste der Regeln, die in der Monitor-Engine implementiert werden sollen. Jede Regel wird mithilfe eines Filters angewendet, der aus einer Liste von OriginalExchange einem MessageType und einem DeathReason besteht. Die Liste der Filter wird durch Komma getrennt. (Beispiel: work.exchange1,Namespace.Abstractions.GenericEvent1,rejected1 – dieser Filter wendet die Regel auf eine Nachricht von Exchange work.exchange1 mit dem Nachrichtentyp Namespace.Abstractions und einem DeathReason von rejected1 an.) |
Regeln: Abwerfen | Liste der Nachrichtenfilter der zu verwerfenden Nachrichten. Die Nachrichten, die diesen Filterkriterien entsprechen, werden automatisch gelöscht. |
Regeln: Wiederholen | Liste der Nachrichtenfilter von Nachrichten, die wiederholt werden sollen, bis die MaxRetries erreicht sind. Die Nachrichten, die diesen Filterkriterien entsprechen, werden zur Wiederholung gesendet. |
Regeln: Parken | Liste der Nachrichtenfilter von Nachrichten, die direkt geparkt werden sollen. Die Nachrichten, die diesen Filterkriterien entsprechen, werden an den Parkplatz gesendet. |
Das Projekt unterstützt derzeit Azure Service Bus und RabbitMQ, implementiert unter dem Namespace *.Connectors
Um anzugeben, welcher Connector verwendet werden soll, legen Sie in der AppSettings-Datei die entsprechende Option für MessageBus ( AzureServiceBus
oder RabbitMQ
) und die zugehörigen Einstellungen fest.
Dieses Projekt freut sich über Beiträge und Vorschläge.
Eine vollständige Anleitung, wie Sie zum DeadLetterMonitor beitragen können, finden Sie in unserem Beitragsleitfaden.
Dieses Projekt hat den Microsoft Open Source Verhaltenskodex übernommen. Weitere Informationen finden Sie in den FAQ zum Verhaltenskodex oder wenden Sie sich bei weiteren Fragen oder Kommentaren an [email protected].