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

Jms “如何在异步上禁用ReplyTo”;“单向”;交换模式,jms,activemq,mule,asynchronous,Jms,Activemq,Mule,Asynchronous,关于Mule 3.3 CE: 尽管我有一个异步的“单向”交换模式,但它会在我真正响应之前用“空”消息向调用者回复两次。所以我得到了三个答案。前两个只是空洞的“废话”,然后我得到了真正的回应 我可以禁用前两个“空”响应,然后将真正的响应返回到应该回复的位置吗。调用者为来自my flow的响应设置临时队列。(现在它在该响应队列上得到三个响应。) 我们需要改变ActiveMQ中的行为吗?到目前为止,它是默认的 <jms:activemq-connector name="Active_MQ_Sta

关于Mule 3.3 CE:

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


我可以禁用前两个“空”响应,然后将真正的响应返回到应该回复的位置吗。调用者为来自my flow的响应设置临时队列。(现在它在该响应队列上得到三个响应。)

我们需要改变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消息。发送方(如果我正确的话,它是一个无状态ejbmdb)将设置一些我需要随身携带的属性,并且我将添加更多的属性。发送方给我一个响应的临时队列设置的名称(mule应用程序(在另一个流中)将在几个其他步骤和其他集成后响应)。我将第一个mule流设置为“单向”,因为我不希望它响应

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

因此,我们得到的实际流是从流1到流3到外部方,然后在流4中得到响应,然后返回到流2到调用方

所以Flow1->Flow3->Flow4->Flow2

Mule-app1:

流程1: 调用者->队列->多路(单向)->队列

流程2: Topic->MuleFlow(单向)->响应临时队列


Mule-App2

流程3: 队列->多路(单向)->变换->队列->外部零件

流程4: 外部部件->队列->多路(单向)->转换->主题

我希望你能跟我来

我猜Mule工作室已经把那些“处理器链”放在那里了。而日志记录就是“日志记录”。我想知道什么时候离开Flow1等等。仅用于日志/调试

谢谢你对此事的考虑


/我不完全明白你在这里干什么

记录器没有从消息中记录任何内容。我认为没有必要全部使用,您只需执行以下操作:

<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"/>

我也不认为需要处理器链,这可能会触发一个bug。尽量不要使用它们


如果我理解错误,您仍然可以从中找到有用的“全部忽略答复”可能会对您有所帮助。

我已覆盖JMSReplyTo属性,并删除了对临时队列的一个响应。“调用者为来自我的流的响应设置了一个临时队列。”让我再添加一些详细信息。我会在上面编辑我的帖子。