关于 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 流程(在 2 个不同的 mule 应用程序中)都设置为“单向”
所以我们的实际流程是从流程 1 到流程 3 到外部方,然后在流程 4 中获得响应,然后返回到流程 2 给调用者。
所以 Flow1->Flow3->Flow4->Flow2
骡子应用程序1:
Flow1:调用者->队列-> MuleFlow(单向)->队列
Flow2:主题-> MuleFlow(单向)-> 响应临时队列
骡子App2
Flow3:队列-> Muleflow(单向)-> 转换-> 队列-> 外部部分
Flow4:外部部分->队列-> MuleFlow(单向)->转换->主题
我希望你能在这方面关注我。
我猜 Mule Studio 已经把那些“处理器链”放在那里了。记录只是“记录”。我想知道什么时候离开 Flow1 等等。仅用于日志/调试。
感谢您对此事的考虑。
/Z