2016-03-19 11 views
1

Ich habe einen Dienst in einer Camel-Route implementiert, der Nachrichten von einer ActiveMQ-Warteschlange konsumiert, etwas verarbeitet und sie an ein externes System sendet.Camel: ActiveMQ-Nachrichten verzögern, bis die Fehlerbedingung behoben wird

Wenn beim Aufruf des externen Systems etwas schief geht, muss die Nachrichten-ID an das aufrufende Backend-System zurückgemeldet werden. Da die Nachrichtenreihenfolge beibehalten werden muss, muss der Dienst die bereits eingereihten und die folgenden Nachrichten verschieben, bis die Fehlerbedingung behoben ist.

In der Tat die fehlgeschlagene Nachricht muss aus der Warteschlange entfernt werden, da es verarbeitet wurde, ablesbar fehlgeschlagen. Dies kann ein Unterschied im Vergleich zu einer Kamel-Neulieferung sein.

Das Backend-System soll die Kontrolle über den weiteren Prozess haben. Entweder sendet es die fragliche Nachricht erneut, dann sollte der Dienst diese eine Nachricht verarbeiten (identifiziert durch seine ID) und dann mit der Verarbeitung der aufgeschobenen Nachrichten fortfahren. Oder das Back-End sendet ein Fortsetzungssignal, das dem Dienst signalisiert, die verzögerten Nachrichten weiter zu verarbeiten, obwohl der fehlgeschlagene nicht erneut angezeigt wurde. Beide Optionen beheben die Fehlerbedingung.

Bisher habe ich überlegt, eine Art Camel-basiertes Switching mit mehreren Warteschlangen zu implementieren, bei dem die Route entscheidet, ob die eingehende Nachricht direkt verarbeitet werden kann oder ob verzögerte verarbeitet werden soll. Aber ich habe keine Ahnung, ob es einige EIPs gibt, die dieses Szenario auf anschauliche Weise darstellen.

Kannst du mir einen Ratschlag geben, wenn es um Kamel geht?

Antwort

1

Was Sie beschreiben klingt klingt (zumindest für mich) eine orchestrierte Workflow vs eine einzelne EIP-- b/c Sie beschreiben die Notwendigkeit, Zustand über mehrere Schritte zu erhalten. Dies kann vollständig mit ereignisgesteuerten Systemen durchgeführt werden, wird jedoch im Allgemeinen brüchig, wenn versucht wird, es in eine einzige Warteschlangenlösung und eine einzige EIP zu zwingen.

Die multiple-queue/multiple Ansatz Camel Route (Stoppweg, Wieder Queuing alles, usw.) keine unnatürlichen Handlungen geradlinig und nicht erfordern würde die Reihenfolge der Nachrichten im Allgemeinen zu halten usw.

0

Vielleicht könnten Sie den EIF-Neuprogrammierer verwenden, um einem fehlgeschlagenen erneuten Austausch Priorität einzuräumen: http://camel.apache.org/resequencer.html.

+0

Soweit ich Ich verstehe Resequencer, es ist keine Option für mein spezifisches Problem. Wenn der Fehlerstatus erreicht wird, kann die Eingabewarteschlange um eine unbekannte Anzahl eingehender Nachrichten wachsen. Resequencer wartet auf einen größenbegrenzten Batch oder Timeouts. Vielleicht sendet das Backend einige Tage später ein Fortsetzungssignal. Die Lieferung von Out-of-Sequence-Nachrichten ist nicht erlaubt. – mdo

Verwandte Themen