我的情况如下,
称为“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
。