2017-04-18 6 views
0

Hallo ich bin neu in Camel und habe eine Design-Frage im Zusammenhang mit JMS-Warteschlangen.Camel JMS Warteschlange Polling und Datenrettung

Ich empfange Satz von Daten. Diese Daten haben ein Bezugsdatum. Diese Daten werden alle 15 Minuten in einem Batch-Prozess gesendet.

Ich muss die empfangenen Daten verarbeiten und sie an eine andere Route weiterleiten.

Wenn bestimmte Daten nicht verarbeitet werden können, muss ich sie erneut verarbeiten. Und ich muss sicherstellen, dass es verarbeitet wird, bevor der nächste Datensatz verarbeitet wird.

Also dachte ich darüber nach, eine JMS-Route zu erstellen, um diese Daten vor der Verarbeitung zu empfangen. Dann verarbeite es. Dann sende es in eine andere Warteschlange.

FTP -> Daten Prozessreihen (A) -> JMS Queue -> Prozessor (B) -> direct:

rufen Wenn der Prozessor B ausfällt möchte ich die Daten vor dem nächsten zu bearbeitenden Datensatz wird per FTP gesendet. (weil der zweite Datensatz eine Aktualisierung der Daten des ersten Datensatzes enthalten kann)

Also dachte ich über eine Warteschlange nach, um sicherzustellen, dass sie immer in der Reihenfolge verarbeitet werden, in der sie empfangen werden.

Aber meine Erfahrung mit JMS, ohne Camel, ist, dass sobald das Objekt aus der Warteschlange konsumiert wird, es nicht mehr in der Warteschlange ist. Ist es auch bei Camel der Fall? In diesem Fall muss ich versuchen, die Daten erneut zu verarbeiten oder sie in die Warteschlange zu stellen?

Dieser "Wiederherstellung" Teil ist mir nicht klar und ich würde gerne die Muster verstehen, die dies unterstützen.

Vielen Dank für Ihre Hilfe

Gilles

Antwort

0

Dieser Teil „wenn das Objekt aus der Warteschlange verbraucht wird es nicht mehr in der Warteschlange befindet.“ ist nicht ganz richtig. Wenn Sie die Warteschlange abonnieren und eine Nachricht erhalten, müssen Sie sie verarbeiten und die Bestätigung an den JMS-Broker senden. Wenn die Bestätigung erfolgreich ist, wird die Nachricht aus der Warteschlange entfernt. Wenn die Bestätigung jedoch nicht erfolgreich ist oder wenn Ihr Prozess abbricht und die Verbindung zum Broker unterbrochen wird, wird die Nachricht nicht aus der Warteschlange entfernt und an einen anderen Benutzer weitergeleitet.

Oft verwenden die meisten JMS-Bibliotheken den Modus, wenn die Bestätigung gesendet wird, wenn die Nachricht vom Kunden empfangen wurde. Sie haben jedoch immer die Möglichkeit, diesen Modus zu ändern und die Bestätigung manuell zu senden, wenn Ihr Verarbeitungsteil erfolgreich beendet wird.

Was Kamel jms (http://camel.apache.org/jms.html) Sie Endpunkt Option „acknowledgementModeName“, die einige verschiedene mögliche Werte wie hat verwenden können:

  • AUTO_ACKNOWLEDGE (default) - Bestätigung direkt nach entsprach wird „von“ geschickt in Ihrem Route
  • CLIENT_ACKNOWLEDGE - ermöglicht der Anwendung zu steuern, wann die Bestätigung gesendet wird, und wenn keine Ausnahmen während der Austauschverarbeitung ausgelöst werden, wird die Nachricht bestätigt und aus der Warteschlange entfernt.
Verwandte Themen