我有一个项目,我们将在兔子中有数百个(可能是数千个)队列,并且这些队列中的每个队列都需要由一组消费者使用。
在Rabbit(使用spring-amqp)中,您具有rabbitlistener批注,该批注使我可以静态分配该特定消费者将要处理的队列。
我的问题是-对于兔子和春天,有没有一种干净的方法可以让我抓取一部分队列(比如说以ac开头的队列),然后侦听使用者运行时创建的任何队列。
示例(开始时):
使用者运行时:
这是我目前拥有的(非常简单的)代码:
@Component
public class MessageConsumer {
public MessageConsumer() {
// ideally grab a section of queues here, initialize a parameter and give to the rabbitlistener annotation
}
@RabbitListener(queues= {"ant-queue", "apple-queue", "cat-queue"})
public void processQueues(String messageAsJson) {
< how do I update the queues declared in rabbit listener above ? >
}
}
编辑:
我应该添加-我已经遍历了我在网上找到的spring amqp文档,但是除了静态地(无论是通过硬编码还是通过属性)声明队列之外,没有发现任何东西
答案 0 :(得分:1)
注入(@Autowired
或其他方式)RabbitListenerEndpointRegistry
。
获取对侦听器容器的引用(使用注释上的id
属性为它提供一个已知ID)(registry.getListenerContainer(id)
)。
将容器投射到AbstractMessageListenerContainer
并调用addQueues()
或addQueueNames()
。
请注意,在动态添加队列时使用DirectMessageListenerContainer
更为有效;使用SimpleMessageListenerContainer
的使用者将停止并重新启动。使用直接容器,每个队列都有自己的使用者。