如何使用spring在jms主题中使用并发?与队列一样,我们可以将 maxConcurrentConsumers 属性设置为所需的数字。但是,如果我为 JMS 主题这样做,则会导致并发消费同一条消息,这是不可取的。
有人可以指出我正确的方向吗?
如何使用spring在jms主题中使用并发?与队列一样,我们可以将 maxConcurrentConsumers 属性设置为所需的数字。但是,如果我为 JMS 主题这样做,则会导致并发消费同一条消息,这是不可取的。
有人可以指出我正确的方向吗?
您以错误的方式使用DefaultMessageListenerContainer。从文档:
请注意,动态缩放首先只对队列有意义;对于一个主题,您通常会坚持使用默认数量的 1 个消费者,否则您将在同一个节点上多次收到相同的消息。
为了帮助您解决问题,您可以将主题中的消息转发到队列,并让您的消费者从此队列中消费。如果您的 JMS 提供程序具有某些转发功能,那么这仅仅是对您的应用程序的配置更改。
好吧,您在评论中自己说过,但只是为了详细说明。
在您的侦听器中,您仍然可以创建多个线程并以异步方式执行处理。收到消息后,立即将其发送给异步使用者。例如,这很容易通过某种执行器来实现。
我真的会选择番石榴的 EventBus。它是如此简单,但又如此易于设置和使用。但这真的是你的选择。