【发布时间】:2013-01-20 02:57:01
【问题描述】:
关于 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 应用程序将收到一条 JMS 消息。发送者(如果我是正确的,它是一个无状态的 EJB MDB)将设置一些我需要随身携带的属性,我将添加更多的属性。发件人给我一个响应的临时队列设置的名称(mule-app(在另一个流程中)将在几个其他步骤和其他集成后响应)。我将第一个 mule-flow 设置为“单向”,因为我不希望它响应。
第一个流将消息放在另一个 JMS 队列中。然后另一个 Mule 应用程序(和 muleflow)接收消息(也是单向的)并将其转换为另一种格式并将其放在另一个队列中。也许这对您没有意义,但在我们的环境中它确实如此。 ;-) 然后在收到“第三方”的响应后,第二个 Mule 应用程序收到响应并将 JMS 消息转换为我们自己的格式(我们仍然拥有这些属性)。现在将其发送到第一个 Mule 应用程序(和第二个流程)(或其他任何人)可以获取消息的主题。不,我们想回复来电者。我们有关于谁发送请求以及他希望响应到哪个队列的属性。所以所有 4 个 mule-flows(在 2 个不同的 mule-apps 中)都设置为“单向”,因为我们希望它是异步的,而不是直接响应,因为途中有几个步骤(和队列)。
所以我们的实际流程是从流程 1 到流程 3 到外部方,然后在流程 4 中获得响应,然后返回到流程 2 到调用方。
所以 Flow1->Flow3->Flow4->Flow2
骡子应用程序1:
流程1: 调用者 -> 队列 -> MuleFlow(单向) -> 队列
流程2: 主题 -> MuleFlow (单向) -> 响应临时队列
Mule-App2
流程3: 队列 -> Muleflow(单向) -> 变换 -> 队列 -> 外部部分
流程4: External Part -> Queue-> MuleFlow(one-way) -> Transform -> Topic
希望你能关注我。
我猜 Mule Studio 已经把那些“处理器链”放在那里了。记录只是“记录”。我想知道什么时候离开 Flow1 等等。仅用于日志/调试。
感谢您对此事的考虑。
/Z
【问题讨论】:
-
我已经覆盖了 JMSReplyTo 属性并删除了对临时队列的响应之一。
-
"调用者为来自我的流的响应设置了一个 TEMP 队列。"
-
让我添加更多细节。我将在上面编辑我的帖子。
标签: jms activemq mule asynchronous