当前位置: 首页 > 知识库问答 >
问题:

在运行时向rabbit侦听器动态添加队列

郜彬
2023-03-14

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

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

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

示例(开始时):

  • 蚂蚁队列
  • 苹果队列
  • 猫队列

消费者运行时:

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

    @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文档,除了静态(硬编码或通过属性)声明队列之外,我没有找到任何东西

共有1个答案

郝池暝
2023-03-14

>

  • 注入(@自动连线或其他方式)RabbitListenerEndpointRegistry。

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

    将容器强制转换为AbstractMessageListenerContainer,并调用addQueues()或addQueueNames()。

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

    请参见选择容器。

  •  类似资料:
    • 问题内容: 我有一个项目,我们将在兔子中有数百个(可能是数千个)队列,并且这些队列中的每个队列都需要由一组消费者使用。 在Rabbit(使用spring-amqp)中,您具有rabbitlistener批注,该批注使我可以静态分配此特定消费者将要处理的队列。 我的问题是-对于兔子和春天,有没有一种干净的方法可以让我抓取一部分队列(比如说以ac开头的队列),然后还监听使用者运行时创建的任何队列。 示

    • 我们试图在我们的Spring Boot应用程序中使用sping-Rabbit创建一个消息侦听器。但是,如果队列不存在,我们在接收消息期间会遇到问题,应用程序会抛出错误,称为被动声明。 我们想要的是主动声明队列,即如果队列不存在,则应该在mq中声明它。

    • 我正在使用 发送和 对于现在从rappid mq接收消息,我希望使用类似以下内容的侦听器: 问题是onMessage监听器与Messages一起工作是否有可能在类似的函数中接收简单的可序列化对象?

    • 在Spring应用程序启动时,我想在Redis中查找一个值,并根据该值关闭或保留消息侦听器。 完全不初始化这些bean也是可以的,但是我也找不到方法。 目前,我正在尝试使用Spring的关闭容器: 容器 消息侦听器: 问题是,如果我用已经在队列中的消息启动应用程序,消息侦听器将在执行之前拾取消息。 有办法实现我的目标吗?即使采用不同的方法

    • 兔子配置: 应用概述:每当gitRepository连接到我们的应用程序时,存储库名称就会成为交换名称,在这种情况下,然后存储库的每个分支都会创建自己的队列,这里有两个队列和。现在每次在开发分支中创建拉取请求时,我都需要将信息传递给开发队列,并且应该由特定的侦听器侦听,该侦听器应该仅注册用于开发。我看到了动态队列的示例,但我似乎找不到任何关于如何创建将使用不同线程执行的动态侦听器的示例,我如何实现

    • 我有一个带有自定义字段的应用程序——用户基本上可以通过选择字段的类型并给它一个名称来定义自定义字段。然后,自定义字段被呈现为实体的一部分,并将提供给这些字段的数据保存到我的数据库中。在大多数情况下,我能够以编程方式并通过正常的Hibernate映射(即@OneTo多国注释集合)处理这些问题而没有问题。然而,我目前面临一个问题。我们希望将这些自定义字段及其值用于“父”实体的实时报告。自定义字段值映射