2015-10-22 36 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框架3.2.4和Spring-JMS-3.0.7。我無法改變技術,第三方罐子或發佈版本。另外,我不能使用單獨的隊列。謝謝!

回答

0

不,這種方法不應該有任何問題。消息選擇器在那裏提供選擇性的消息消耗,就像你配置的一樣。

相關問題