Fehlgeschlagene Nachrichten mit einer Dead Letter Queue in Jitterbit Studio behandeln
Einführung
Der Jitterbit MQ Connector ermöglicht die Verarbeitung von Nachrichten aus einer Warteschlange mit einer Get-Aktivität. Bei Verarbeitungsfehlern ist ein häufiger Ansatz die NACK-Aktivität mit Requeue Messages After NACK, um die Nachricht später erneut zur Warteschlange hinzuzufügen. Bei Quorum-Warteschlangen hat dieser Ansatz jedoch eine harte Grenze: Nach 20 fehlgeschlagenen Bestätigungen wird die Nachricht ohne Fehler dauerhaft aus der Warteschlange entfernt. Für Integrationen, die kontrolliertes Wiederholungsverhalten und garantierte Zustellung erfordern, nutzt man stattdessen das Dead Letter Queue (DLQ) Muster.
Diese Anleitung führt durch die Erstellung eines DLQ-Musters mit mehreren Warteschlangen und einer Reihe von Studio-Operationen. Fehlgeschlagene Nachrichten werden aus der Hauptwarteschlange abgelehnt und an eine Serie von Wiederholungswarteschlangen mit zunehmenden Verzögerungen weitergeleitet. Nach einer konfigurierbaren Anzahl von Versuchen werden Nachrichten an eine finale DLQ zur manuellen Überprüfung gesendet.
Für einfachere Wiederholungsanforderungen, die keine mehrstufige Verzögerungsweiterleitung erfordern, siehe Fehlgeschlagenen Vorgang erneut ausführen. Weitere Informationen zur Konfiguration von On-Success- und On-Fail-Verhalten finden Sie unter Fehlerbehandlung in Operationen konfigurieren.
Diese Anleitung geht von Folgendem aus:
- Sie haben eine funktionierende Jitterbit MQ-Verbindung in Studio. Anweisungen zur Einrichtung finden Sie in der Jitterbit MQ Connector Dokumentation.
- Sie sind mit der Erstellung und Ausführung von Studio-Operationen vertraut.
- Sie verwenden Quorum-Warteschlangen, die für Dauerhaftigkeit erforderlich sind, aber die 20-Versuch-Zustellungsbegrenzung auferlegen, die dieses Muster adressiert.
Teil 1: Die Warteschlangen erstellen
Schritt 1: Die Warteschlangen in der Management Console erstellen
-
Öffnen Sie die Seite Message Queues der Management Console.
-
Erstellen Sie die folgenden fünf Warteschlangen. Setzen Sie den Type für jede auf Quorum.
Warteschlangenname Zweck Nachrichten-TTL orders.mainPrimäre Verarbeitungswarteschlange — orders.retry.1mErste Wiederholung (1-Minuten-Verzögerung) 3.600.000 ms orders.retry.5mZweite Wiederholung (5-Minuten-Verzögerung) 3.600.000 ms orders.retry.30mDritte Wiederholung (30-Minuten-Verzögerung) 3.600.000 ms orders.dlqLetzte Warteschlange zur manuellen Überprüfung 864.000.000 ms Passen Sie die Warteschlangennamen und die Anzahl der Wiederholungsebenen an Ihre Integration an.
Hinweis
Die TTL-Werte in den Wiederholungswarteschlangen sind eine Sicherheitsmaßnahme, die verhindert, dass sich Nachrichten unbegrenzt ansammeln, falls eine Forwarder-Operation fehlschlägt. Die Verzögerung zwischen Wiederholungen wird durch die Häufigkeit der Ausführung der Forwarder-Operationen gesteuert, nicht durch die TTL.
Teil 2: Die Hauptprozessor-Operation konfigurieren
Schritt 2: Ein retryCount-Feld zur Nachrichten-Payload hinzufügen
Das DLQ-Muster verwendet ein retryCount-Feld in der Nachricht, um zu verfolgen, wie oft die Verarbeitung versucht wurde. Fügen Sie dieses Feld zu Ihrer Nachricht mit einem Anfangswert von 0 hinzu, bevor die Operation zum ersten Mal ausgelöst wird.
Beispiel-Payload
{
"orderId": "ORD-12345",
"retryCount": 0
}
Verwenden Sie einen konsistenten Namen auf der obersten Ebene über alle Operationen im Muster hinweg. Das retryCount-Feld ist der einzige Mechanismus zur Verfolgung des Versuchsverlaufs über Läufe hinweg.
Schritt 3: Die On-Fail-Routing-Operation erstellen
Wenn der Hauptprozessor fehlschlägt, muss die On-Fail-Operation die aktuelle retryCount lesen, die Nachricht an die entsprechende Wiederholungswarteschlange weiterleiten und dann die ursprüngliche Nachricht aus der Hauptwarteschlange ablehnen.
-
Lesen Sie
retryCountaus dem FeldmessageBodyim Antwortschema der Get-Aktivität. -
Erhöhen Sie den Wert um
1mithilfe eines Skripts oder einer Transformation. -
Leiten Sie basierend auf der aktualisierten Anzahl an die entsprechende Warteschlange weiter:
retryCount-WertZielwarteschlange 1orders.retry.1m2orders.retry.5m3oder4orders.retry.30mGrößer als 4orders.dlq -
Schreiben Sie den aktualisierten
retryCountzurück in das FeldmessageBodydes Request-Schemas der Send-Aktivität, wenn Sie zur Zielwarteschlange weiterleiten. -
Nachdem die Send-Aktivität abgeschlossen ist, verwenden Sie die NACK-Aktivität mit der Option Reject Messages After NACK, um die Nachricht aus
orders.mainzu entfernen.
Wichtig
Die Send-Aktivität zur Warteschlange „Wiederholen" muss vor der NACK-Aktivität abgeschlossen sein. Diese Reihenfolge stellt sicher, dass die Nachricht nicht verloren geht, wenn die Send-Aktivität fehlschlägt. Verwenden Sie nicht Requeue Messages After NACK, da dies die DLQ-Routinglogik umgeht und zum Lieferversuchlimit von 20 zählt.
Schritt 4: Konfigurieren Sie die Hauptprozessor-Operation
-
Öffnen oder erstellen Sie in Studio die Operation, die Nachrichten aus
orders.mainverarbeitet. -
Fügen Sie eine Get-Aktivität hinzu, die so konfiguriert ist, dass sie aus
orders.mainliest. -
Fügen Sie die Schritte hinzu, die jede Nachricht verarbeiten (z. B. Abfrage eines ERP-Systems für den erwarteten Bestellstatus).
-
Öffnen Sie die Aktionen der Operation und konfigurieren Sie Folgendes:
- Bei Erfolg: Führen Sie eine Operation aus, die die Acknowledge-Aktivität verwendet, um die Nachricht aus
orders.mainzu bestätigen. - Bei Fehler: Führen Sie die in Schritt 3 erstellte On-Fail-Routing-Operation aus.
- Bei Erfolg: Führen Sie eine Operation aus, die die Acknowledge-Aktivität verwendet, um die Nachricht aus
Teil 3: Konfigurieren Sie die Retry-Forwarder-Operationen
Erstellen Sie eine Forwarder-Operation für jede Retry-Warteschlange. Jeder Forwarder liest Nachrichten aus seiner Retry-Warteschlange, sendet sie zurück an orders.main zur erneuten Verarbeitung und wird nach einem Zeitplan ausgeführt, der der beabsichtigten Verzögerung für diese Stufe entspricht.
Schritt 5: Erstellen Sie jede Forwarder-Operation
Erstellen Sie für jede Retry-Stufe eine Operation mit den folgenden Schritten:
-
Fügen Sie eine Get-Aktivität hinzu, um eine Nachricht aus der Retry-Warteschlange abzurufen.
-
Fügen Sie eine Send-Aktivität hinzu, um die Nachricht an
orders.mainzu senden und dabei denretryCount-Wert in der Nutzlast beizubehalten. -
Fügen Sie eine Acknowledge-Aktivität hinzu, um die Nachricht aus der Retry-Warteschlange zu bestätigen.
Wichtig
Die Send-Aktivität zu orders.main muss vor der Acknowledge-Aktivität abgeschlossen sein. Wenn die Send-Aktivität fehlschlägt, bleibt die Nachricht in der Retry-Warteschlange und wird bei der nächsten Forwarder-Ausführung wieder abgeholt. Das Bestätigen vor Abschluss der Send-Aktivität würde die Nachricht stillschweigend aus der Retry-Warteschlange entfernen, ohne zu garantieren, dass sie orders.main erreicht.
Schritt 6: Planen Sie jede Forwarder-Operation
Fügen Sie einen Operationszeitplan an jede Forwarder-Operation an, mit einem Intervall, das ihrer Retry-Stufe entspricht:
| Operation | Quellwarteschlange | Planintervall |
|---|---|---|
| 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 |
Anweisungen zum Einrichten eines Zeitplans finden Sie unter Planen Sie einen Vorgang zur automatischen Ausführung.
DLQ-Inspector-Vorgang (optional)
Erstellen Sie einen Vorgang, der aus orders.dlq liest, um Meldungen zu benachrichtigen oder zu protokollieren, die alle Wiederholungsversuche erschöpft haben. Dieser Vorgang kann eine E-Mail-Benachrichtigung senden, in ein Protokoll schreiben oder einen manuellen Überprüfungs-Workflow auslösen. Anweisungen zum Senden von E-Mails aus einem Studio-Vorgang finden Sie unter Senden Sie eine E-Mail-Benachrichtigung von einem Studio-Vorgang.
Hinweis
Meldungen in orders.dlq erfordern manuelle Intervention. Sie bleiben in der Warteschlange, bis sie explizit bestätigt werden oder ihre TTL abläuft.
Überprüfen Sie die Integration
-
Stellen Sie das Projekt bereit.
-
Senden Sie eine Testnachricht an
orders.mainmitretryCount: 0in der Nutzlast. -
Lösen Sie einen Verarbeitungsfehler im Hauptprozessor-Vorgang aus (indem Sie beispielsweise einen Fehler aus dem Verarbeitungsskript zurückgeben).
-
Öffnen Sie die Vorgangsprotokolle in Studio und bestätigen Sie, dass der On-Fail-Vorgang ausgeführt wurde und die Nachricht an
orders.retry.1mgesendet wurde. -
Warten Sie, bis die 1-Minuten-Weiterleitung ausgeführt wird. Bestätigen Sie in den Vorgungsprotokollen, dass die Weiterleitung die Nachricht aus
orders.retry.1mabgerufen und zurück anorders.maingesendet hat. -
Fahren Sie fort, Fehler auszulösen, um die Nachricht durch die verbleibenden Wiederholungsebenen zu bewegen. Die Warteschlange
orders.retry.5mverarbeitet einen Durchgang (retryCount2), undorders.retry.30mverarbeitet zwei Durchgänge (retryCount3 und 4). Nach dem fünften fehlgeschlagenen Versuch wird die Nachricht anorders.dlqweitergeleitet. -
Öffnen Sie die Seite Nachrichtenwarteschlangen der Management Console und bestätigen Sie, dass eine Nachricht in
orders.dlqeingegangen ist.