2012-11-05 58 views
0

我有一個駱駝路由消耗在JMS(activemq)隊列上,這個隊列的目標是以請求/回覆方式調用。在這條路線中,我拆分消息並調用另一個activemq隊列(也以請求/回覆的方式)。在Apache Camel路由中處理傳入的JMSCorrelationId

下面有示出的情況

<route> 
    <from uri="activemq:A" /> 
    <split> 
     <xpath>/root/subpart</xpath> 
     <inOut uri="activemq:B" /> 
    </split> 
</route> 

問題的最小路徑是駱駝不設置新的JMSCorrelationId(因爲已經有一個從傳入消息)。如果什麼都沒有完成,你會得到未知correlationId的迴應,交易永遠不會結束。

我沒有詳細說明,但我的猜測是相同的temporaryQueue用於分解器,但它(邏輯上)期望每個消息都有不同的相關ID。所有人都使用相同的,它接受第一個,不知道如何處理與其他人。

什麼是處理這種情況的最佳解決方案?

我發現工作的一個是保存在另一個頭部傳入的JMSCorrelationId(不知道我需要但是),並刪除它。這並不像我想要的那樣乾淨,但我想不出別的。有任何想法嗎 ?

回答

1

本質上,你的情況在這裏描述Jira issue似乎在2.11中會有一個增加,你可以讓駱駝創建一個新的corr-id。

所以,在此期間,爲什麼你不繼續你的工作 - 在發送到「activemq:B」之前刪除JMSCorrelationId標頭<removeHeader headerName="JMSCorrelationId" />?我想現在是最好的解決方案。

您當然也可以在第二個端點上使用「useMessageIDAsCorrelationID」選項。