Java Spring JMS MessageListenerContainer是否同时接收消息?
我想知道如果指向某个主题的MessageListenerContainer同时收到2条(或更多)消息会发生什么情况 例如,应用程序的两个用户同时触发发布,因此2个jmstemplate调用向同一主题发送两条不同的消息 容器将如何处理此问题Java Spring JMS MessageListenerContainer是否同时接收消息?,java,jms,mq,spring-jms,Java,Jms,Mq,Spring Jms,我想知道如果指向某个主题的MessageListenerContainer同时收到2条(或更多)消息会发生什么情况 例如,应用程序的两个用户同时触发发布,因此2个jmstemplate调用向同一主题发送两条不同的消息 容器将如何处理此问题 容器是否会同时创建两个线程来调用MessageListenerAdapter(应该实现为线程安全的) 或者容器是否只有一个线程串行(顺序)调用MessageListenerAdapter 并发性设置控制有多少侦听器同时使用消息。对于主题,您不应使用多个使用者,
并发性设置控制有多少侦听器同时使用消息。对于主题,您不应使用多个使用者,否则,该消息可能在同一节点上使用两次
<jms:listener-container
container-type="default"
connection-factory="connectionFactory"
acknowledge="auto"
concurrency="1"
cache="consumer">
<jms:listener destination="TEST.FOO"
ref="simpleMessageListener"
method="onMessage" />
</jms:listener-container>
看到这个了吗。。。
春季文档。。。
并发设置控制有多少侦听器同时使用消息。对于主题,您不应使用多个使用者,否则,该消息可能在同一节点上使用两次
<jms:listener-container
container-type="default"
connection-factory="connectionFactory"
acknowledge="auto"
concurrency="1"
cache="consumer">
<jms:listener destination="TEST.FOO"
ref="simpleMessageListener"
method="onMessage" />
</jms:listener-container>
看到这个了吗。。。
春季文档。。。
谢谢您的回复。但是如果我将并发设置为1,这是否意味着容器/适配器同时接收的2条消息将被串行处理,而不是并行处理?是的,对于每个节点有1个侦听器的主题,将串行处理2条单独的消息。如果为同一主题设置
concurrency>1
,则每个侦听器将并行处理相同的消息;这对于主题来说是毫无意义的。你的用例是什么;留言里有什么?如果是新闻广播或类似内容,请使用主题,但如果您需要对任何唯一消息(例如,客户订单)进行一次处理,请使用队列并设置concurrency>1
以并行处理许多消息。谢谢您的回复。但是如果我将并发设置为1,这是否意味着容器/适配器同时接收的2条消息将被串行处理,而不是并行处理?是的,对于每个节点有1个侦听器的主题,将串行处理2条单独的消息。如果为同一主题设置concurrency>1
,则每个侦听器将并行处理相同的消息;这对于主题来说是毫无意义的。你的用例是什么;留言里有什么?如果是新闻广播或类似内容,请使用主题,但如果您需要对任何唯一消息(例如,客户订单)进行一次处理,请使用队列并设置concurrency>1
以并行处理多条消息。