cmu*_*t78 4 java spring spring-jms
我正在设置一个JMS订阅者监听器,目标是实现一个5个线程的池,监听topATopic,但是,我在运行时看到的是多个消费者处理相同的记录(recordCount*#of consumers).
考虑到我刚接触春天,我假设我做错了什么.
<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>
Run Code Online (Sandbox Code Playgroud)
有人可以指点我朝着实现目标的方向前进吗?
Mar*_*all 10
查看侦听器容器配置中的并发设置.在Spring的JMS的文档表明,并发应该设置为1主题听众.见下文.
并发:为每个侦听器启动的并发会话/使用者数.可以是指示最大数量的简单数字(例如"5")或指示下限和上限的范围(例如"3-5").请注意,指定的最小值只是一个提示,可能在运行时被忽略.默认值为1; 在主题监听器或队列排序很重要的情况下,将并发性限制为1 ; 考虑将其提升为一般队列.
这篇文章与你提出的其他问题类似.
如果需要多个线程来跟上消息量,则消息侦听器可以委派给Spring TaskExecutor来异步处理消息.TaskExecutors可以由许多实现支持,包括线程池.