2017-06-16 5 views
1

Ich habe einen etwas wie folgt neu zu starten:Apache Kamel die Route

from("rabbitmq://...") 
    .process(processor1) 
      : 
    .process(processorn) 
    .process(SendToExternalAppProcessor) 

Der SendToExternalAppProcessor.process() verwendet Produzent Vorlage die eine Anforderung von dem Inhalt des exchange Parameter auf einen anderen rabbitmq2 mit sendBody() Verfahren gebildet zu senden.

Das Problem ist, dass sobald SendToExternalAppProcessor.process() ausgeführt wird und über Route ausgeführt wird, es erneut oberhalb Route zusammen mit dem Listener der rabbitmq2 startet.

Was fehlt mir hier? Gibt es irgendeine Apache Camel Konfiguration, die aus meiner Aufmerksamkeit rutscht?

PS: Ich weiß, dass ich hier keinen konkreten Code gegeben habe, um das Szenario auf Ihrer Maschine zu replizieren, aber bin in der Hoffnung, dass erfahrene Kopf und Augen sich schnell erinnern werden und etwas vorschlagen. (Auch ich kann nicht sogleich meine Projektcode-Aktie und auch seine große und komplexe)

Update:
Ich habe versucht, durch sendBody() kommentieren und startet noch die Strecke. Ich muss etwas seltsame Grundeinstellung hier fehlen ...

+0

Können Sie alle Protokollnachrichten teilen? Was weist Sie darauf hin, dass die Route neu gestartet wird? –

Antwort

0

Ich denke, das ist nur ein Missverständnis der Art, wie Routen funktionieren. "Von" ist kein One-Shot-Event; Es akzeptiert weiterhin Nachrichten von der Quelle, bis Sie der Route ausdrücklich mitteilen, dass sie anhalten soll.

+0

Ich verstehe das. Ich habe eine einzige Nachricht an rabbitmq veröffentlicht. Ist ihre Chance, dass 'from()', die auf diesem Kaninchen mq hörte, unendlich laufen kann. Ich denke, es sollte nur einmal für eine einzelne veröffentlichte Nachricht laufen? – anir

+0

Hmmm ... vielleicht ist die Nachricht ein InOut-Austausch-Typ und es geht zurück zum 'von' Endpunkt? Vielleicht aktivieren Sie die Nachrichtenverfolgung und sehen Sie. Sie könnten auch hinzufügen: .setExchangePattern (ExchangePattern.InOnly) direkt nach "von", um es zu erzwingen und sehen, ob das Verhalten ändert. –

0

"von" funktioniert wie ein normaler Kaninchen mq Verbraucher. Die Route ist so angelegt, dass sie immer läuft.

Wenn Sie nur Austausch zu einem anderen Rabbitmq übertragen möchten, ist "To" genug.

from("rabbitmq://...") 
    .process(processor1) 
      : 
    .process(processorn) 
    .to("rabbitmq://rabbit2...") 
0

Bitte lassen Sie uns wissen, welche Version von Camel Sie verwenden. Benutzt du einen abgewickelten Kamelfluss? Wenn ein Transaktionsmodus aktiviert ist, könnte ein mögliches Problem die JMS-Bestätigungsbestätigung sein. Kann sein, dass Kamel Nachricht und Verarbeitung verbraucht, aber rabbitmq nicht anerkennt. So ist die Nachricht immer noch da und konsumiert immer wieder auf Kamelroute. Standardmäßig ist es AUTO_ACKNOWLEDGE, das sollte also nicht der Fall sein, wenn nicht die Kamelroute abgewickelt wird.

Verwandte Themen