如何使用JMS按顺序(逐个)处理消息:Mule ESB

时间:2016-05-31 09:52:59

标签: mule mule-studio mule-component

我的情况如下,

称为“InQ”(同步)的入站队列,每条消息都包含messageHeader JMSXGroupID(示例A或B或C)。基于JMSXGroupId标题,我将路由到clientA或ClientB或ClientC。

SomeTime如果ClientA需要更长的时间来响应。我不想在队列InQ' which have JMSXGroupID = A`中使用otherMessages。一旦响应回来,我需要按顺序处理其他消息。

我确实实现了Client Ack Transaction。但是在这种情况下,如果我等待来自ClientA的响应,其他带有JMXGroupId B and C的消息似乎也在等待。这意味着它一个接一个地查看(FIFO)我不想这样做。

不确定如何基于JMSXGroupID实现FIFO。任何想法和想法都会有所帮助。提前谢谢。

<jms:activemq-connector name="Active_MQ" username="....." password="..." brokerURL="...." validateConnections="true" doc:name="Active MQ"  numberOfConsumers="1"  maxRedelivery="-1" disableTemporaryReplyToDestinations="true" persistentDelivery="true"/>

     <flow name="testFlow">
    <jms:inbound-endpoint connector-ref="Active_MQ" doc:name="JMS" queue="InQ" exchange-pattern="request-response">
        <jms:client-ack-transaction action="ALWAYS_BEGIN"/>          
    </jms:inbound-endpoint>
    <logger level="INFO" doc:name="Logger" message="**testCheck#[payload]"/>
    <choice doc:name="Choice">
        <when expression="#[message.inboundProperties.JMSXGroupId=='A']">
            <logger level="INFO" doc:name="Logger" message="***first***"/>
            <flow-ref name="ClientA" doc:name="ClientA"/>
        </when>
        <when expression="#[message.inboundProperties.JMSXGroupId=='B']">
            <flow-ref name="ClientB" doc:name="ClientB"/>
        </when>
       <when expression="#[message.inboundProperties.JMSXGroupId=='C']">
            <flow-ref name="ClientC" doc:name="ClientC"/>
        </when>
        <otherwise>
            <logger level="INFO"  doc:name=" Other Logger"/>
        </otherwise>
    </choice>     
</flow>

Edit1:全部3个,听同一个队列。

     <composite-source doc:name="Composite Source">
     <jms:inbound-endpoint connector-ref="Active_MQ" doc:name="JMS" queue="InQ">
     <jms:selector expression="JMSXGroupID=A"/>
     </jms:inbound-endpoint>
     <jms:inbound-endpoint connector-ref="Active_MQ" doc:name="JMS" queue="InQ">
     <jms:selector expression="JMSXGroupID=B"/>
     </jms:inbound-endpoint>
      <jms:inbound-endpoint connector-ref="Active_MQ" doc:name="JMS" queue="InQ">
      <jms:selector expression="JMSXGroupID=C"/>
      </jms:inbound-endpoint>
    </composite-source>  

它确实抛出了错误There is already a listener registered on this connector on endpointUri: jms://InQ

0 个答案:

没有答案