【问题标题】:How to disable ReplyTo on Asynchronous "one-way" exchange pattern如何在异步“单向”交换模式上禁用回复
【发布时间】: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


【解决方案1】:

我不完全明白你在这里做什么。

记录器没有从消息中记录任何内容。我认为不需要全部使用,您可以这样做:

<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 可能会对您有所帮助。

【讨论】:

    猜你喜欢
    • 2021-05-20
    • 2021-02-09
    • 2014-03-14
    • 1970-01-01
    • 2014-07-16
    • 2013-08-13
    • 1970-01-01
    • 2012-04-13
    • 2019-05-08
    相关资源
    最近更新 更多