2017-06-16 95 views
1

我有一個東西如下:阿帕奇駱駝重新啓動路線

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

SendToExternalAppProcessor.process()使用生產模板,讓從內容中exchange參數形成的一些請求轉發給其他rabbitmq2sendBody()方法。

問題是,一旦SendToExternalAppProcessor.process()執行並且上面的路由執行,它將再次重新啓動上面的路由以及rabbitmq2的監聽程序。

我在這裏失蹤了什麼?是否有任何apache camel配置從我的注意力中滑落?

PS:我知道我沒有在這裏給出任何具體的代碼,以便在您的機器上覆制場景,但希望經驗豐富的頭部和眼睛能夠快速回想並提出建議。 (我也不能立時分享我的項目代碼以及它的大而複雜的)

更新:
我試圖通過評論sendBody(),仍然重新啓動路線。我必須在這裏錯過一些奇怪的基本設置...

+0

你可以分享任何日誌消息嗎?你有什麼跡象表明路線正在重新啓動? –

回答

0

我認爲這只是對路線工作方式的誤解。 'from'不是一次性事件;它會繼續接收來自源的消息,直到您明確告訴路由停止。

+0

我明白這一點。我發佈了單個消息給rabbitmq。他們聽到那個rabbitmq的'from()'是否有任何機會可以無限運行。我想它應該只運行一次正確的單個消息發佈給它? – anir

+0

嗯...也許這個消息是一個InOut交換類型,它將回到'from'端點?也許啓用消息跟蹤並查看。您也可以在'from'之後添加: .setExchangePattern(ExchangePattern.InOnly) 以強制它並查看是否改變了行爲。 –

0

「from」作爲正常rabbitmq消費者使用。路線被設計爲一直運行。

如果您只是想將交換轉移到另一個rabbitmq,「to」就足夠了。

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

請讓我們知道您正在使用哪種駱駝版本。 您是否使用交易駱駝流?如果任何事務模式處於打開狀態,則可能有一個問題可能是JMS提交確認。可能是駱駝正在消費和處理消息,但不承認rabbitmq。所以消息仍然存在,駱駝路線一次又一次地消耗。默認情況下它是AUTO_ACKNOWLEDGE,所以不應該是這種情況,如果沒有交易駱駝路線。