Spring-integration / ActiveMQ 在单个线程中订阅多个目的地
Posted
技术标签:
【中文标题】Spring-integration / ActiveMQ 在单个线程中订阅多个目的地【英文标题】:Spring-integration / ActiveMQ subscribe to multiple destinations in a single thread 【发布时间】:2015-08-02 15:48:59 【问题描述】:我正在使用多个<si:service-activator>
和<jms:message-driven-channel-adapter>
订阅多个队列和主题。来自每个目的地的消息都在一个单独的线程中接收,这意味着我的接收代码充满了锁来保护可变的内部状态。
我希望我的接收代码是无锁的。是否可以将 spring-integration/activemq 配置为从同一线程上的多个目的地接收?
如果这不可能,我可以想到两种选择:
启动我自己的处理线程,该线程从阻塞队列中读取数据,将所有接收到的消息放到这个队列中。
将所有收到的消息分派到一个目的地并从中消费。
谁有更好的想法?
【问题讨论】:
【参考方案1】:在单个队列上使用wildcard pattern。
也就是说,不是从两个队列中读取,而是使用一个队列并在名称中指定要读取的所有队列。
即:"QUEUE.NR1,QUEUE.NR2"
或 "SOME.PREFIX.>"
以读取具有该前缀的所有队列。您的客户端代码将此作为单个队列处理。
【讨论】:
是的,这确实有效。注意:通过通配符订阅的队列(即使是 2 个逗号分隔)在收到第一条消息之前不会显示在 Web 控制台中。下一个问题是如何用通配符混合队列和主题? 使用 VirtualTopics 使用队列订阅主题。否则你不能真正混合。 activemq.apache.org/virtual-destinations.html以上是关于Spring-integration / ActiveMQ 在单个线程中订阅多个目的地的主要内容,如果未能解决你的问题,请参考以下文章
Spring-integration / ActiveMQ 在单个线程中订阅多个目的地
在 spring-integration 中使用有效负载类型路由器通过列表通用有效负载路由消息
Spring-Integration Webflux 异常处理