2015-10-22 2 views
0

Были ли проблемы с использованием двух экземпляров DefaultMessageListenerContainer, прослушивающих одну и ту же очередь с помощью другого messageSelector? Поддерживается ли этот сценарий (вы экспериментировали с ним)?Несколько DefaultMessageListenerContainer же очередь

Я хочу, чтобы два слушателя могли обрабатывать сообщения независимо друг от друга параллельно (одновременно). Сообщения будут передаваться каждому слушателю в зависимости от состояния messageSelector.

Моя установка такова:

<bean id="messageListener1" class="com.xyz.MyListener" scope="singleton"/> 
<bean id="messageListener2" class="com.xyz.MyListener" scope="singleton"/> 

<bean id="listenerContainer1" class="org.springframework.jms.listener.DefaultMessageListenerContainer" scope="singleton"> 
    <property name="connectionFactory" ref="credentialsconnectionfactory"/> 
    <property name="destination" ref="serialQueue"/> 
    <property name="messageListener" ref="messageListener1"/> 
    <property name="concurrentConsumers" value="1"/> 
    <property name="sessionAcknowledgeModeName" value="AUTO_ACKNOWLEDGE"/> 
    <property name="sessionTransacted" value="false"/> 
    <property name="messageSelector" 
     value="msgName IN ('SomeMessageName1','SomeMessageName2')" /> 
    <property name="taskExecutor"> 
     <bean id="serialTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor" scope="singleton"> 
      <property name="corePoolSize" value="1"/> 
     </bean> 
    </property> 
</bean> 


<bean id="listenerContainer1" class="org.springframework.jms.listener.DefaultMessageListenerContainer" scope="singleton"> 
    <property name="connectionFactory" ref="credentialsconnectionfactory"/> 
    <property name="destination" ref="serialQueue"/> 
    <property name="messageListener" ref="messageListener2"/> 
    <property name="concurrentConsumers" value="1"/> 
    <property name="sessionAcknowledgeModeName" value="AUTO_ACKNOWLEDGE"/> 
    <property name="sessionTransacted" value="false"/> 
    <property name="messageSelector" value="msgName NOT IN ('SomeMessageName1','SomeMessageName2')" /> 
    <property name="taskExecutor"> 
     <bean id="serialSCMTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor" scope="singleton"> 
      <property name="corePoolSize" value="1"/> 
     </bean> 
    </property> 
</bean> 

Я использую JBOSS EAP 6.2 (HornetQ) сервер обмена сообщениями, Spring Framework 3.2.4 и Spring-jms- 3.0.7. Я не могу изменить технологию, сторонние банки или версию. Кроме того, я не могу использовать отдельную очередь. Благодаря!

ответ

0

Нет проблем с этим подходом не должно быть. Селектора сообщений предназначены для обеспечения выборочного потребления сообщений, как вы настроили.