多个DefaultMessageListenerContainer相同的队列

时间:2015-10-22 20:30:13

标签: java spring jboss jms hornetq

使用两个DefaultMessageListenerContainer实例监听具有不同messageSelector的同一队列会不会有任何问题?是否支持此方案(您是否尝试过它)?

我希望这两个侦听器能够并行(同时)独立于另一个侦听器处理消息。消息将根据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。我不能改变技术,第三方罐子或发布版本。另外,我不能使用单独的队列。谢谢!

1 个答案:

答案 0 :(得分:0)

这种方法不应该有任何问题。消息选择器用于配置与您配置的选择性消息消耗。