如何在异步“单向”交换模式上禁用ReplyTo

时间:2013-02-05 08:37:36

标签: jms activemq mule asynchronous

关于Mule 3.3 CE:

即使我有一个异步的“单向”交换模式,它在我的真实响应之前向调用者回复两次“空”消息。所以我得到了三个回复。前两个只是空的“废话”,然后我得到了我的真实回复。

我可以禁用前两个“空”响应,只是将我的真实响应回到我应该回复的位置。调用者为我的流的响应设置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(在另一个流程中)将在几个其他步骤和其他集成之后响应)。第一个mule-flow我设置为“单向”,因为我不希望它响应。

此第一个流将消息放在另一个JMS队列上。然后另一个Mule-app(和muleflow)接收消息(单向)并将其转换为另一种格式并将其放在另一个队列中。也许这对你没有意义,但在我们的环境中确实如此。 ;-)然后在收到“第三方”的回复后,第二个Mule-app收到响应并将JMS消息转换为我们自己的格式(我们仍然拥有属性)。现在将其发送到第一个Mule-app(和第二个流)(或其他任何人)可以获取消息的主题。不,我们想要回应来电者。我们有关于谁发送请求以及他想要响应的队列的属性。因此,所有4个骡子流(在2个不同的mule-apps中)都设置为“单向”,因为我们希望它是异步的而不是直接响应,因为路上有几个步骤(和队列)。

因此我们实际流程从流程1流向流程3,然后在流程4中获得响应,然后返回流程2到呼叫者。

So Flow1-&gt; Flow3-&gt; Flow4-&gt; Flow2

骡-APP1:

初​​级流瑜伽: 来电 - &gt;队列 - &gt; MuleFlow(单向) - &gt;队列

中级课程: 主题 - &gt; MuleFlow(单向) - &gt;响应临时队列


骡-App2的

FLOW3: 队列 - &gt; Muleflow(单向) - &gt;变换 - &gt;队列 - &gt;外部部分

Flow4: 外部部分 - &gt; Queue-&GT; MuleFlow(单向) - &gt;变换 - &gt;主题

我希望你能跟着我。

我想Mule Studio已将那些“处理器链”放在那里。记录只是“记录”。我想知道什么时候离开Flow1等等。仅用于日志/调试。

感谢您在这件事上的考虑。

/ Z

1 个答案:

答案 0 :(得分: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"/>

我也没有看到处理器链的需要,这可能会触发错误。尽量不要使用它们。

如果我发现它错了,你可以发现Ricston module中的 ignore-reply-all 可以帮助你。