Mule重用请求应答(相同的JMS队列)

Mule重用请求应答(相同的JMS队列),mule,esb,Mule,Esb,我的流程需要使用组件请求-应答两次,但当我尝试执行以下问题时: <flow name="myprojectFlow"> <http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"/> <request-reply doc:name="RR1"> <jms:outbound-endpoint

我的流程需要使用组件请求-应答两次,但当我尝试执行以下问题时:

    <flow name="myprojectFlow">
        <http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"/>
        <request-reply doc:name="RR1">
            <jms:outbound-endpoint queue="req_queue" doc:name="JMS" connector-ref="Active_MQ">
                <jms:transaction action="ALWAYS_BEGIN"/>
            </jms:outbound-endpoint>
            <jms:inbound-endpoint queue="rep_queue" doc:name="JMS" connector-ref="Active_MQ">
                <jms:transaction action="ALWAYS_BEGIN"/>
            </jms:inbound-endpoint>
        </request-reply>
        <request-reply doc:name="RR2">
            <jms:outbound-endpoint queue="req_queue" doc:name="JMS" connector-ref="Active_MQ">
                <jms:transaction action="ALWAYS_BEGIN"/>
            </jms:outbound-endpoint>
            <jms:inbound-endpoint queue="rep_queue" doc:name="JMS" connector-ref="Active_MQ">
                <jms:transaction action="ALWAYS_BEGIN"/>
            </jms:inbound-endpoint>
        </request-reply>
    </flow>

另一个系统从req_队列接收消息并发送到rep_队列

错误:

ERROR 2015-10-07 19:48:41,703 [main] org.mule.module.launcher.application.DefaultMuleApplication: null
org.mule.api.transport.ConnectorException: There is already a listener registered on this connector on endpointUri: jms://rep_queue. Connector that caused exception is: ActiveMQJmsConnector
{
  name=Active_MQ
  lifecycle=start
  this=75361cf6
  numberOfConcurrentTransactedReceivers=4
  createMultipleTransactedReceivers=true
  connected=true
  supportedProtocols=[jms]
  serviceOverrides=<none>
}

    at org.mule.transport.AbstractConnector.registerListener(AbstractConnector.java:1258) ~[mule-core-3.7.0.jar:3.7.0]
    at org.mule.endpoint.DefaultInboundEndpoint.start(DefaultInboundEndpoint.java:104) ~[mule-core-3.7.0.jar:3.7.0]
    at org.mule.routing.requestreply.SimpleAsyncRequestReplyRequester.start(SimpleAsyncRequestReplyRequester.java:87) ~[mule-core-3.7.0.jar:3.7.0]
    at org.mule.processor.chain.AbstractMessageProcessorChain.start(AbstractMessageProcessorChain.java:102) ~[mule-core-3.7.0.jar:3.7.0]
    at org.mule.construct.AbstractFlowConstruct.startIfStartable(AbstractFlowConstruct.java:325) ~[mule-core-3.7.0.jar:3.7.0]
    at org.mule.construct.AbstractPipeline.doStart(AbstractPipeline.java:351) ~[mule-core-3.7.0.jar:3.7.0]
    at org.mule.construct.Flow.doStart(Flow.java:90) ~[mule-core-3.7.0.jar:3.7.0]
    at org.mule.construct.AbstractFlowConstruct$2.onTransition(AbstractFlowConstruct.java:136) ~[mule-core-3.7.0.jar:3.7.0]
ERROR 2015-10-07 19:48:41703[main]org.mule.module.launcher.application.DefaultMuleApplication:null
org.mule.api.transport.ConnectorException:endpointUri上已在此连接器上注册了侦听器:jms://rep_queue. 导致异常的连接器是:ActiveMQJmsConnector
{
name=Active_MQ
生命周期=开始
该值=75361cf6
ConcurrentTransacticedReceiver的数量=4
CreateMultipleTransactedReceiver=true
已连接=真
supportedProtocols=[jms]
服务覆盖=
}
在org.mule.transport.AbstractConnector.registerListener(AbstractConnector.java:1258)~[mule-core-3.7.0.jar:3.7.0]
在org.mule.endpoint.DefaultInboundEndpoint.start(DefaultInboundEndpoint.java:104)~[mule-core-3.7.0.jar:3.7.0]
在org.mule.routing.requestreply.SimpleAsyncRequestReplyRequester.start(SimpleAsyncRequestReplyRequester.java:87)~[mule-core-3.7.0.jar:3.7.0]
在org.mule.processor.chain.AbstractMessageProcessorChain.start(AbstractMessageProcessorChain.java:102)~[mule-core-3.7.0.jar:3.7.0]
在org.mule.construct.AbstractFlowConstruct.startIfStartable(AbstractFlowConstruct.java:325)~[mule-core-3.7.0.jar:3.7.0]
在org.mule.construct.AbstractPipeline.doStart(AbstractPipeline.java:351)~[mule-core-3.7.0.jar:3.7.0]
在org.mule.construct.Flow.doStart(Flow.java:90)~[mule-core-3.7.0.jar:3.7.0]
在org.mule.construct.AbstractFlowConstruct$2.onTransition(AbstractFlowConstruct.java:136)~[mule-core-3.7.0.jar:3.7.0]

如何在一个流中两次使用同一JMS队列的请求-应答?

您确定要指向JMS队列吗?我可以看到您将消息发送到“req_队列”,并指向“rep_队列”以接收消息。您将永远无法从“rep_queue”那里获得消息。我做了一些修改,从我做起。如果不能满足您的要求,请告诉我

<flow name="myprojectFlow">
<http:listener config-ref="HTTP_Listener_Configuration1" path="/" doc:name="HTTP"/>
<set-payload doc:name="Set Payload" value="Hi"/>
<request-reply doc:name="RR1">
    <jms:outbound-endpoint queue="req_queue" doc:name="JMS" connector-ref="Active_MQ">
        <jms:transaction action="ALWAYS_BEGIN"/>
    </jms:outbound-endpoint>
    <jms:inbound-endpoint queue="req_queue" doc:name="JMS" connector-ref="Active_MQ">
        <jms:transaction action="ALWAYS_BEGIN"/>
    </jms:inbound-endpoint>
</request-reply>
<logger message="---- payload ---#[payload]" level="INFO" doc:name="Logger"/>
<request-reply doc:name="RR2">
    <jms:outbound-endpoint queue="req_queue1" doc:name="JMS" connector-ref="Active_MQ">
        <jms:transaction action="ALWAYS_BEGIN"/>
    </jms:outbound-endpoint>
    <jms:inbound-endpoint queue="req_queue1" doc:name="JMS" connector-ref="Active_MQ">
        <jms:transaction action="ALWAYS_BEGIN"/>
    </jms:inbound-endpoint>
</request-reply>
<logger message="---- payload1 ---#[payload]" level="INFO" doc:name="Logger"/>


您确定您的指向吗?我可以看到您将消息发送到“req_队列”,并指向“rep_队列”以接收消息。您将永远无法从“rep_queue”那里获得消息。我做了一些修改,从我做起。如果不能满足您的要求,请告诉我

<flow name="myprojectFlow">
<http:listener config-ref="HTTP_Listener_Configuration1" path="/" doc:name="HTTP"/>
<set-payload doc:name="Set Payload" value="Hi"/>
<request-reply doc:name="RR1">
    <jms:outbound-endpoint queue="req_queue" doc:name="JMS" connector-ref="Active_MQ">
        <jms:transaction action="ALWAYS_BEGIN"/>
    </jms:outbound-endpoint>
    <jms:inbound-endpoint queue="req_queue" doc:name="JMS" connector-ref="Active_MQ">
        <jms:transaction action="ALWAYS_BEGIN"/>
    </jms:inbound-endpoint>
</request-reply>
<logger message="---- payload ---#[payload]" level="INFO" doc:name="Logger"/>
<request-reply doc:name="RR2">
    <jms:outbound-endpoint queue="req_queue1" doc:name="JMS" connector-ref="Active_MQ">
        <jms:transaction action="ALWAYS_BEGIN"/>
    </jms:outbound-endpoint>
    <jms:inbound-endpoint queue="req_queue1" doc:name="JMS" connector-ref="Active_MQ">
        <jms:transaction action="ALWAYS_BEGIN"/>
    </jms:inbound-endpoint>
</request-reply>
<logger message="---- payload1 ---#[payload]" level="INFO" doc:name="Logger"/>


谢谢您的回答,但我认为您犯了一个错误,另一个系统从req_队列接收消息并发送到rep_队列。问题是如何使用两次相同的rep_队列进行连续的请求-应答。为什么要为同一个“rep_队列”使用两个侦听器?据我所知,您不能在单个会话中在同一队列上注册多个侦听器。您需要有不同的会话来注册多个侦听器。或者您可以使用主题代替队列。请参阅我尝试使用的activemq文档主题,但它不起作用-相同的错误:ConnectorException:endpointUri上的此连接器上已注册了一个侦听器:jms://topic:TestTopic. 导致异常的连接器是:ActiveMQJmsConnector“另一个系统”-它是另一个mule流。它没有outbound元素,并自动向mainFlow的request-reply元素发送回复消息。如何使回复JMS(在主流的两个请求-回复中)从一个“另一个流-回复”接收到要订阅的消息。感谢您的回答,但我认为您犯了一个错误,另一个系统从req_队列接收消息并发送到rep_队列。问题是如何使用两次相同的rep_队列进行连续的请求-应答。为什么要为同一个“rep_队列”使用两个侦听器?据我所知,您不能在单个会话中在同一队列上注册多个侦听器。您需要有不同的会话来注册多个侦听器。或者您可以使用主题代替队列。请参阅我尝试使用的activemq文档主题,但它不起作用-相同的错误:ConnectorException:endpointUri上的此连接器上已注册了一个侦听器:jms://topic:TestTopic. 导致异常的连接器是:ActiveMQJmsConnector“另一个系统”-它是另一个mule流。它没有outbound元素,并自动向mainFlow的request-reply元素发送回复消息。如何使reply JMS(在两个请求中都是来自主流的reply)从一个“另一个流reply”接收到要订阅的消息。