Spring-集成/ActiveMQ 在单个线程中订阅多个目的地
Spring-integration / ActiveMQ subscribe to multiple destinations in a single thread
我正在使用多个 <si:service-activator>
和 <jms:message-driven-channel-adapter>
来订阅多个队列和主题。来自每个目的地的消息在单独的线程中接收,这意味着我的接收代码充满了锁来保护可变的内部状态。
我希望我的接收码是无锁的。是否可以将 spring-integration/activemq 配置为在同一线程上从多个目的地接收?
如果这不可能,我可以想到两个替代方案:
启动我自己的从阻塞队列中读取的处理线程,将所有接收到的消息放入该队列。
将所有收到的消息发送到一个目的地并从中消费。
有人有更好的主意吗?
在单个队列上使用 wildcard pattern。
也就是说,不是从两个队列中读取,而是使用一个队列并在名称中指定要从中读取的所有队列。
即:"QUEUE.NR1,QUEUE.NR2"
或 "SOME.PREFIX.>"
以读取具有该前缀的所有队列。您的客户端代码将其作为单个队列处理。
我正在使用多个 <si:service-activator>
和 <jms:message-driven-channel-adapter>
来订阅多个队列和主题。来自每个目的地的消息在单独的线程中接收,这意味着我的接收代码充满了锁来保护可变的内部状态。
我希望我的接收码是无锁的。是否可以将 spring-integration/activemq 配置为在同一线程上从多个目的地接收?
如果这不可能,我可以想到两个替代方案:
启动我自己的从阻塞队列中读取的处理线程,将所有接收到的消息放入该队列。
将所有收到的消息发送到一个目的地并从中消费。
有人有更好的主意吗?
在单个队列上使用 wildcard pattern。
也就是说,不是从两个队列中读取,而是使用一个队列并在名称中指定要从中读取的所有队列。
即:"QUEUE.NR1,QUEUE.NR2"
或 "SOME.PREFIX.>"
以读取具有该前缀的所有队列。您的客户端代码将其作为单个队列处理。