gpt4 book ai didi

java - 具有不同消息选择器的多个 DefaultMessageListenerContainer 实例

转载 作者:行者123 更新时间:2023-11-30 09:19:05 24 4
gpt4 key购买 nike

我有一个要求,我在一个队列中有消息,消息选择器的数量是可配置的。我需要并行处理这些消息的地方。

经过深思熟虑,我发现使用多个 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的消息

提前致谢

最佳答案

经过数小时的研究和谷歌搜索,发现我正在迭代的 foreach 循环设置了相同的 parallelProcess,因此它最终设置为 TYPE3

所以解决方案是在每次循环时创建一个新的 bean...

解决办法

<bean id="myBeanFactory" class="org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean">
<property name="targetBeanName">
<idref local="parallelProcess"/>
</property>
</bean>

for (String selector : messageSelectors.getSelectors()) {
DefaultMessageListenerContainer parallelProcess= myBeanFactory.getObject();
parallelProcess.setMessageSelector(QueueDecisionProcessor.MESSAGE_CATEGORY + " = '" + selector + "'");
parallelProcess.start();
}

关于java - 具有不同消息选择器的多个 DefaultMessageListenerContainer 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18117844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com