我正在设置一个JMS订户听众,如下所示,目的是实现5个线程的池听,但是我在运行时看到的是多个消费者处理相同的记录(消费者的记录量*#)。

考虑到我是春天的新手,我假设我做错了什么。

<bean id="messageListener" class="com.abc.app.mdp.Receiver">
<property name="bean" ref="bean" />
</bean>

<jms:listener-container container-type="default"
connection-factory="connectionFactory" acknowledge="auto" concurrency="5" destination-type="topic" prefetch="1" cache="none" >
<jms:listener destination="topCli_Service" ref="messageListener" 
method="onMessage" subscription="AProjectSubscriber" />
</jms:listener-container>

<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryB ean">
<property name="jndiName" value="jms/jms-top-notx" />
</bean>

有人可以请我指向实现目标的方向吗?

有帮助吗?

解决方案

看一下 并发 在侦听器容器配置上设置。这 春季JMS文档 建议将并发设置为主题听众的1。见下文。

并发:每个侦听器启动的并发会话/消费者的数量。可以是指示最大数字(例如“ 5”)的简单数字,也可以是指示较低和上限(例如“ 3-5”)的范围。请注意,指定的最小值只是一个提示,在运行时可能会忽略。默认值为1; 在主题听众的情况下,保持并发限制为1 或者如果队列排序很重要;考虑为一般队列提出。

这个帖子 与您的其余问题相似。

如果您需要多个线程来跟上消息量,则您的消息侦听器可以委派到弹簧 塔斯凯·埃 异步处理消息。 taskexecutor可以通过包括线程池在内的许多实现来支持。

其他提示

如果您希望给定的消息仅由一个消费者消费,则应使用队列而不是主题。主题消息均广播给所有可用的消费者。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top