Последовательное получение сообщения от Jms в потоке мулов - PullRequest
0 голосов
/ 14 мая 2018

У меня есть очередь tibco, где мы получаем сообщения от производителей, и поток сообщений перебирает эти сообщения. У меня есть numberOfConsumers установлено в 20 в JMS: соединитель. Некоторое время, когда нагрузка высока, мои сообщения поступают не по порядку в потоке. Я хочу, чтобы мой поток получал сообщения в последовательности, не делая его однопоточным.

Ниже приведен поток с регистратором в начале потока:

<flow name="some name" doc:name="ServiceId-8" initialState="started"> 
    <jms:inbound-endpoint queue="${queue1}" connector-ref="jmsconnector" doc:name="JMS"> 
    <logger message="Receiving Message: #[message.payload]"  category="com.xyz" level="INFO" doc:name="Logger"/>
        <jms:transaction action="ALWAYS_BEGIN"/>  
    </jms:inbound-endpoint>  
     <processor....
     <component....
     ........
     ........
</flow>

Разъем:

<jms:connector name="jmsconnector" specification="1.1" username="${name}" password="${pass}" validateConnections="true" jndiInitialFactory="factoryClass" jndiProviderUrl="${url}" connectionFactoryJndiName="GenericConnectionFactory" cacheJmsSessions="true" eagerConsumer="true" forceJndiDestinations="true" numberOfConsumers="20" persistentDelivery="true" maxRedelivery="5" doc:name="JMS"> 
    <spring:property name="jndiProviderProperties"> 
        <spring:map> 
        <spring:entry key="java.naming.security.principal" value="${name}"/>  
        <spring:entry key="java.naming.security.credentials" value="${pass}"/>  
        </spring:map>  
    </spring:property>  
    <reconnect-forever/>  
</jms:connector>

1 Ответ

0 голосов
/ 15 мая 2018

Вы можете воспользоваться любым из следующих подходов.

  1. Установить очередь равной exclusive .Это позволит серверу отправлять сообщения только одному потребителю.

  2. с использованием свойства JMSXGroupID JMS.Это будет гарантировать, что сообщения обрабатываются для конкретной группы, приходящей в заголовке «JMSXGroupID».например, если есть 5 сообщений с JMSXGroupID, установленным как «customer1» для 3 сообщений и «customer2» для 2 сообщений.Тогда обработка 3 сообщений в разделе «customer1» и обработка 2 сообщений в разделе «customer2» будут последовательными.Однако сообщения для обеих групп будут выполняться параллельно.

...