2013-02-05 17 views
0

關於騾子3.3 CE:如何禁用異步的ReplyTo「單向」交流模式

即使我有一個異步的「單向」交流模式就回復兩次給呼叫者與之前的「空」的消息我的真實迴應。所以我得到三個答覆。前兩個只是空的「垃圾」,然後我得到我的真實迴應。

我可以禁用前兩個「空」響應,只是讓我的真實迴應回到我應該回復的地方。調用者爲我的流程中的響應設置一個TEMP隊列。 (現在它在該響應隊列中得到三個響應)。

我們是否需要更改ActiveMQ中的行爲?這是目前的默認設置。

<jms:activemq-connector name="Active_MQ_Staging" brokerURL="tcp://xxx.xxx.xxx.x:yyyy" validateConnections="true" maxRedelivery="2" doc:name="Active MQ" forceJndiDestinations="true" honorQosHeaders="true" specification="1.1" disableTemporaryReplyToDestinations="true"/> 
<flow name="MyFlow2" doc:name="MyFlow2"> 
    <jms:inbound-endpoint queue="myQueue" connector-ref="Active_MQ_Staging" doc:name="JMS" exchange-pattern="one-way"/> 
       <all doc:name="All"> 
        <processor-chain> 
         <jms:outbound-endpoint queue="${queue.mule.levinforequest}" disableTemporaryReplyToDestinations="true" connector-ref="Active_MQ_Staging" doc:name="JMS"/> 
        </processor-chain> 
        <processor-chain> 
         <logger message="Leaving AppFacade" level="INFO" doc:name="Logger"/> 
        </processor-chain> 
       </all> 
.... 

編輯: 好吧,我沒有發表在上面的聲明。

這就是我們想要做的: Mule-app會收到一條JMS消息。發送者(如果我是正確的話,它是一個無狀態的EJB MDB)將設置一些我需要隨身攜帶的屬性,我將添加更多屬性。發件人給我一個響應的臨時隊列設置的名稱(其他流程中的mule-app將在幾個其他步驟和其他集成之後響應)。這第一次騾流是我設置爲「單向」,因爲我不希望它做出迴應。

該第一個流程將消息放在另一個JMS隊列中。然後,另一個Mule-app(和muleflow)接收消息(單向),並將其轉換爲另一種格式,並將其放在另一個隊列中。也許這對你沒有意義,但在我們的環境中它確實有意義。 ;-)然後在收到來自「第三方」的響應之後第二個Mule-app收到響應並將JMS消息轉換爲我們自己的格式(我們仍然有我們的屬性)。現在把它發送到第一個Mule-app(和第二流)(或任何其他人)可以得到消息的主題。不,我們想回應來電者。我們有誰發送請求的屬性以及他希望響應的隊列。因此,所有4個mule-flows(在2個不同的mule-apps中)都設置爲「單向」,因爲我們希望它是異步的,而不是直接響應,因爲在路上有幾個步驟(和隊列)。

所以我們有實際的流程從流程1到流程3到外部方,然後在流程4中獲得響應,然後回到流程2給調用者。

所以Flow1-> Flow3-> Flow4->中級課程

騾-APP1:

初級流瑜伽: 呼叫者 - >隊列 - > MuleFlow(單程) - >隊列

中級課程: 主題 - > MuleFlow(單程) - >效應初探到Temp-隊列


騾-App2的

FLOW3: 隊列 - > Muleflow(單程) - >變換 - >隊列 - >外部部分

Flow4: 外部部分 - > Queue-> MuleFlow(單程) - >變換 - >主題

我希望你能關注我。

我想騾子工作室已經把那些「處理器鏈」放在那裏。記錄只是「記錄」。我想知道什麼時候離開Flow1等等。只是爲了記錄/調試。

謝謝你在這件事上的考慮。

/Z

+0

我已經覆蓋了JMSReplyTo屬性並刪除了對臨時隊列的響應之一。 ZiggyStardust

+0

「調用者爲我的流的響應設置了一個TEMP隊列。」 < - 你能把它關掉嗎? –

+0

讓我再添加一些細節。我將在上面編輯我的帖子。 – ZiggyStardust

回答

0

我不完全明白你在這裏做什麼。

記錄器不記錄任何消息。我認爲沒有必要使用所有,你可以做:

<jms:outbound-endpoint queue="${queue.mule.levinforequest}" disableTemporaryReplyToDestinations="true" connector-ref="Active_MQ_Staging" doc:name="JMS"/> 
<logger message="Leaving AppFacade" level="INFO" doc:name="Logger"/> 

我不認爲需要對處理器鏈或者,可以觸發一個錯誤。儘量不要使用它們。

如果我發現它錯了,你可以反正找到有用的ignore-reply-all可能對你有幫助。