Dead Letter Queue für Jitterbit Message Queue
Übersicht
Diese Seite beschreibt, wie man ein Dead Letter Queue (DLQ) Designmuster mit dem Jitterbit Message Queue Service und dem Jitterbit MQ Connector implementiert.
Ein DLQ-Muster leitet Nachrichten, die nicht erfolgreich verarbeitet werden können, durch eine Reihe von Wiederholungswarteschlangen mit zunehmenden Verzögerungen, bevor sie in eine endgültige DLQ zur manuellen Überprüfung platziert werden.
NACK- und Wiederholungsbeschränkungen
Ein gängiges Integrationsmuster ist die Verwendung der NACK-Aktivität mit der Option Nach NACK Nachrichten erneut in die Warteschlange stellen, um eine Nachricht zurück in die Warteschlange zu senden, wenn die Verarbeitung fehlschlägt. Zum Beispiel kann eine Integration zur Rechnungsstellung von Bestellungen ein ERP-System wiederholt abfragen, bis eine Bestellung den erwarteten Status erreicht.
Dieser Ansatz hat zwei wesentliche Nachteile, wenn er mit Quorum-Warteschlangen verwendet wird:
- Nachrichten, die nicht sofort verarbeitet werden können, werden an den Anfang der Warteschlange zurückgegeben und kontinuierlich erneut versucht, wodurch Verarbeitungsressourcen verbraucht werden.
- Quorum-Warteschlangen setzen eine Liefergrenze von 20 Versuchen durch. Nachdem eine Nachricht 20 Mal negativ bestätigt wurde, wird sie ohne Fehlermeldung dauerhaft aus der Warteschlange entfernt.
Das DLQ-Muster verwendet stattdessen die NACK-Aktivität mit der Option Nach NACK Nachrichten ablehnen und implementiert eine explizite Weiterleitung zu einer Reihe von Wiederholungswarteschlangen mit eskalierenden Verzögerungen, wie in den folgenden Abschnitten beschrieben.
Musterübersicht
Das DLQ-Muster verwendet mehrere Warteschlangen und eine Reihe von Studio-Operationen:
- Nachrichten werden aus einer Hauptwarteschlange verarbeitet.
- Bei einem Fehler wird die Nachricht abgelehnt (nicht erneut in die Warteschlange gestellt) und an die erste Wiederholungswarteschlange mit einem erhöhten
retryCount-Wert im Payload gesendet. - Eine geplante Operation liest nach ihrem Verzögerungsintervall aus jeder Wiederholungswarteschlange und leitet die Nachrichten zur erneuten Verarbeitung zurück an die Hauptwarteschlange.
- Nach einer konfigurierbaren maximalen Anzahl von Versuchen werden die Nachrichten zur manuellen Überprüfung an die DLQ gesendet.
Queue setup
Erstellen Sie die folgenden fünf Warteschlangen auf der Seite Nachrichtenwarteschlangen der Management-Konsole. Alle Warteschlangen sollten den Typ Quorum für die Dauerhaftigkeit verwenden.
Tipp
Passen Sie die Warteschlangennamen und die Anzahl der Wiederholungsstufen an Ihre Integration an.
| Warteschlangenname | Zweck | Vorgeschlagene Nachrichten-TTL |
|---|---|---|
orders.main |
Primäre Verarbeitungswarteschlange | — |
orders.retry.1m |
Erste Wiederholung (1-Minuten-Verzögerung) | 3.600.000 ms |
orders.retry.5m |
Zweite Wiederholung (5-Minuten-Verzögerung) | 3.600.000 ms |
orders.retry.30m |
Dritte Wiederholung (30-Minuten-Verzögerung) | 3.600.000 ms |
orders.dlq |
Letzte Warteschlange zur manuellen Überprüfung | 864.000.000 ms |
Hinweis
Die oben genannten Nachrichten-TTL-Werte sind eine Sicherheitsmaßnahme, die verhindert, dass Nachrichten unbegrenzt angesammelt werden, wenn eine Operation sie nicht verarbeiten kann. Die Verzögerung zwischen den Wiederholungen wird durch die Häufigkeit der Ausführung der Wiederholungsweiterleitungsoperationen gesteuert, nicht durch die TTL.
Message payload requirements
Um fehlgeschlagene Verarbeitungsversuche zu verfolgen, fügen Sie ein Feld retryCount (eine Ganzzahl, die bei 0 beginnt) zu Ihrer Nachrichtenlast hinzu. Bei jedem fehlgeschlagenen Verarbeitungsversuch konfigurieren Sie die Hauptverarbeitungsoperation, um die folgenden Schritte auszuführen:
-
Lesen Sie
retryCountaus dem FeldmessageBodyim Antwortschema der Get activity. -
Erhöhen Sie den Wert mithilfe eines Skripts oder einer Transformation.
-
Schreiben Sie den aktualisierten Wert über das Feld
messageBodyim Anfrage-Schema der Send activity, wenn Sie zur Wiederholungswarteschlange weiterleiten.
Hinweis
Das Feld retryCount in der Nutzlast ist der einzige Mechanismus zur Verfolgung der Versuchshistorie. Verwenden Sie einen konsistenten, obersten Feldnamen in allen Operationen.
Beispielpayload
{
"orderId": "ORD-12345",
"retryCount": 0
}
Workflow-Design
Hauptprozessorbetrieb
Konfigurieren Sie diesen Betrieb so, dass er von orders.main liest und versucht, jede Nachricht zu verarbeiten.
-
Verwenden Sie die Get activity, um eine Nachricht von
orders.mainabzurufen. -
Versuchen Sie, die Nachricht zu verarbeiten (zum Beispiel, um das ERP-System nach dem erwarteten Bestellstatus abzufragen).
-
Verwenden Sie operation actions, um die folgenden Aktionen zu konfigurieren:
-
Bei Erfolg: Führen Sie einen Betrieb aus, der die Acknowledge activity verwendet, um die Nachricht zu bestätigen.
-
Bei Fehler: Führen Sie einen Betrieb aus, der die folgenden Schritte ausführt:
- Lesen Sie
retryCountaus der Nachrichtenpayload und erhöhen Sie ihn um1. -
Verwenden Sie die Send activity, um die aktualisierte Nachricht an die entsprechende Wiederholungswarteschlange zu senden:
retryCount-WertZielwarteschlange 1orders.retry.1m2orders.retry.5m3oder4orders.retry.30mGrößer als 4orders.dlq -
Verwenden Sie die NACK activity mit Nach NACK Nachrichten ablehnen, um die Nachricht aus
orders.mainzu entfernen.
- Lesen Sie
-
Wichtig
Die Send activity zur Wiederholungswarteschlange muss abgeschlossen sein, bevor die NACK activity ausgeführt wird. Diese Reihenfolge stellt sicher, dass die Nachricht nicht verloren geht, wenn die Send activity fehlschlägt.
Retry-Forwarder-Operationen
Erstellen Sie eine Forwarder-Operation für jede Retry-Warteschlange. Konfigurieren Sie jede Operation so, dass sie Nachrichten aus ihrer Retry-Warteschlange liest, sie zurück an orders.main zur erneuten Verarbeitung sendet und nach einem Zeitplan ausgeführt wird, der der beabsichtigten Verzögerung entspricht:
| Operation | Quell-Warteschlange | Zeitplan |
|---|---|---|
| Retry-Forwarder 1m | orders.retry.1m |
Alle 1 Minute |
| Retry-Forwarder 5m | orders.retry.5m |
Alle 5 Minuten |
| Retry-Forwarder 30m | orders.retry.30m |
Alle 30 Minuten |
Konfigurieren Sie jede Operation, um die folgenden Schritte auszuführen:
-
Verwenden Sie die Get activity, um eine Nachricht aus der Retry-Warteschlange abzurufen.
-
Verwenden Sie die Send activity, um die Nachricht an
orders.mainzu senden und den Wert vonretryCountim Payload beizubehalten. -
Verwenden Sie die Acknowledge activity, um die Nachricht aus der Retry-Warteschlange zu bestätigen.
Hinweis
Für Informationen zur Planung von Operationen siehe operation schedules.
DLQ-Inspektor-Operation (optional)
Erstellen Sie eine Operation, die aus orders.dlq liest, um auf Nachrichten zu alerten oder diese zu protokollieren, die alle Retry-Versuche erschöpft haben. Diese Operation kann Email-Benachrichtigungen senden, in ein Protokoll schreiben oder einen manuellen Überprüfungsworkflow auslösen.
Hinweis
Nachrichten in orders.dlq erfordern manuelles Eingreifen. Konfigurieren Sie Email-Benachrichtigungen, um Ihr Team zu benachrichtigen, wenn Nachrichten eintreffen.