0

关于 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

4

1 回答 1

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 模块中的ignore-reply-all对你有帮助。

于 2013-02-05T12:27:38.100 回答