【发布时间】:2013-08-08 13:20:48
【问题描述】:
我有一个要求,我的队列中有消息,消息选择器的数量是可配置的。我需要在哪里并行处理这些消息。
经过仔细考虑,我发现使用多个 DefaultMessageListenerContainer 会产生良好的效果。
所以我配置了一切
<bean id="parallelProcess"
class="org.springframework.jms.listener.DefaultMessageListenerContainer" scope="prototype">
<property name="connectionFactory" ref="jmsConnectionFactory"/>
<property name="autoStartup" value="false"/>
<property name="destinationName" value="parallel.process.queue"/>
<property name="messageListener" ref="messageProcessor"/>
</bean>
并动态创建 DefaultMessageListenerContainers
for (String selector : messageSelectors.getSelectors()) {
parallelProcess.setMessageSelector("Message" + " = '" + selector + "'");
parallelProcess.start();
}
问题是,如果我有 3 个选择器,它只会为最后一个选择器创建 DefaultMessageListenerContainer。即,如果选择器={"TYPE1", "TYPE3", "TYPE3"}
只有 TYPE3 的消息才会被消息监听器捕获
提前谢谢你
【问题讨论】: