gpt4 book ai didi

java - 如何线程池一个 Spring JMS 监听器

转载 作者:搜寻专家 更新时间:2023-11-01 01:18:57 24 4
gpt4 key购买 nike

我正在如下设置 JMS 订阅者监听器,目标是实现一个由 5 个线程组成的池来监听 topATopic,但是,我在运行时看到的是多个消费者处理同一条记录 (recordCount*#of consumers)。

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

<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>

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

最佳答案

查看监听器容器配置中的并发 设置。 Spring JMS doc建议主题监听器的并发性应设置为 1。见下文。

concurrency: The number of concurrent sessions/consumers to start for each listener. Can either be a simple number indicating the maximum number (e.g. "5") or a range indicating the lower as well as the upper limit (e.g. "3-5"). Note that a specified minimum is just a hint and might be ignored at runtime. Default is 1; keep concurrency limited to 1 in case of a topic listener or if queue ordering is important; consider raising it for general queues.

This post与您的其他问题类似。

如果您需要多个线程来跟上消息量,您的消息监听器可以委托(delegate)给 Spring TaskExecutor异步处理消息。 TaskExecutors 可以得到包括线程池在内的许多实现的支持。

关于java - 如何线程池一个 Spring JMS 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5807638/

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