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?
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