多个 DefaultMessageListenerContainer 同一个队列
Multiple DefaultMessageListenerContainer same queue
使用两个 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。我无法更改技术、第三方 jar 或发布版本。另外,我不能使用单独的队列。谢谢!
不,这种方法不应该有任何问题。消息选择器可以像您配置的那样提供选择性消息消费。
使用两个 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。我无法更改技术、第三方 jar 或发布版本。另外,我不能使用单独的队列。谢谢!
不,这种方法不应该有任何问题。消息选择器可以像您配置的那样提供选择性消息消费。