2014-10-03 88 views
2

當使用InOut範例向JMS端點發送請求/響應消息時,Camel JMS documentation描述瞭如何在請求消息上設置消息過期,但它沒有描述響應消息是否具有當請求消息的使用者發送它時設置超時(JMS過期)。該文檔確實描述了消費者可以設置的replyToDeliveryPersistent URI選項,以指定它發送的響應消息應該是非持久性的,但我沒有看到任何讓您指定響應消息是否會設置過期日期的內容。TimeToLive在駱駝響應消息中

是否有某種方法可以確保響應消息將會過期(因此可以自動從代理中刪除),如果它們在一段時間內未消耗(例如,因爲請求的生成者在讀取之前被殺死對最終請求的響應),而不實現自定義的ActiveMQ使用者,並失去使用Camel的好處?我控制着生產者和消費者,所以這些變化可以發生在他們需要做出的任何一方(我知道消費者的終點是這個可能需要完成的地方)。這裏唯一的標準是駱駝必須保持處理消息和回覆消息的響應方法,因爲必須親自實施這個方法比持久回覆消息更糟糕。

回答

3

對消息設置到期時間(JMSExpiration標頭)的唯一方法是從其生產點(即生產者)開始。

在你的情況下,消費者您的要求應設置JMSExpiration日期明確,使用JMS組件的URI選項timeToLive,有沒有辦法來設置在請求方此選項。


1) JMS規範指出,而不是直接設置JMSExpiration,JMS客戶端應指定時間到現場。然後將標題計算爲生存時間與當前GMT值之和。

+0

你說得對,URI選項是'replyToDeliveryPersistent';我已經更新了這個問題來解決這個問題。我知道我需要將這一點應用於消費者方面,而且這不是問題,因爲我控制了這兩者; 「replyToDeliveryPersistent」URI選項也適用於消費者的URI,所以我期望將它設置在那裏。我實際上解釋了爲迴應作者然後刪除的另一個答案,所以我已經更新了我的問題以明確說明。 – Tim 2014-10-09 16:09:11

+0

所以我認爲你所建議的是應用'JMSExpiration'頭(實際上可以直接發送,參見http://stackoverflow.com/questions/15507948/set-ttl-apache-camel-java-dsl )通過Camel處理器或直接在Camel DSL中發送給響應消息。這比我更喜歡的更麻煩(我可能會提交一個用於駱駝的JIRA來添加一個'replyToTimeToLive' URI選項以使它更容易),但它會起作用。 – Tim 2014-10-09 16:24:56

+0

@Tim我很抱歉,但我現在很困惑。讓我給**客戶端應用程序**和另一端**服務器應用程序**調用進/出端。 *客戶端應用*將發送請求消息並等待回覆,*服務器應用*將接收*客戶端應用*發送的請求消息,對其進行處理,生成回覆消息並將其發送到*客戶端應用* (正在等待它)。現在,你想要的是*客戶端應用程序*指定將由*服務器應用程序*生成併發送的回覆消息的JMSExpiration,我是否正確地獲得了該消息? – 2014-10-09 21:05:01