gpt4 book ai didi

java - 在运行时向兔子监听器动态添加队列

转载 作者:搜寻专家 更新时间:2023-11-01 03:15:40 24 4
gpt4 key购买 nike

我有一个项目,我们将在 rabbit 中有数百(可能是数千)个队列,并且每个队列都需要由一个消费者池使用。

在 rabbit 中(使用 spring-amqp),你有 rabbitlistener 注释,它允许我静态分配这个特定消费者将处理的队列。

我的问题是 - 对于 rabbit 和 spring,有没有一种干净的方法可以让我获取一部分队列(比如说以 a-c 开头的队列),然后监听在消费者运行时创建的任何队列。

示例(开始时):

  • Ant 队列
  • 苹果队列
  • 猫队列

消费者运行时:

  • 添加 bat 队列

这是我目前拥有的(非常简单的)代码:

    @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 文档,但我没有发现任何静态(硬编码或通过属性)声明队列之外的内容

最佳答案

  • 注入(inject)(@Autowired 或其他方式)RabbitListenerEndpointRegistry

  • 获取对监听器容器的引用(使用注释上的 id 属性为其提供一个已知的 id)(registry.getListenerContainer(id)) .

  • 将容器转换为 AbstractMessageListenerContainer 并调用 addQueues()addQueueNames()

请注意,动态添加队列时使用 DirectMessageListenerContainer 效率更高;使用 SimpleMessageListenerContainer 消费者被停止并重新启动。使用直接容器,每个队列都有自己的消费者。

参见 Choosing a container .

关于java - 在运行时向兔子监听器动态添加队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54094994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com