当前位置: 首页 > 面试题库 >

在运行时将队列动态添加到Rabbit侦听器

羊舌新荣
2023-03-14
问题内容

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

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


问题答案:
  • 注入(@Autowired或以其他方式)RabbitListenerEndpointRegistry

  • 获取对侦听器容器的引用(使用id批注中的属性为其提供已知ID)(registry.getListenerContainer(id))。

  • 将容器转换为,AbstractMessageListenerContainer然后调用addQueues()addQueueNames()

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

请参阅选择容器。



 类似资料:
  • 我有一个项目,我们将在rabbit中有数百个(可能数千个)队列,每个队列都需要一个消费者池来使用。 在rabbit(使用spring amqp)中,您有rabbitlistener注释,它允许我静态地分配这个特定消费者将处理的队列。 我的问题是,对于rabbit和spring,是否有一种干净的方法可以让我获取一段队列(比如以a-c开头的队列),然后还可以侦听消费者运行时创建的任何队列。 示例(开始

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

  • 问题内容: 我有一个ArrayList,它向其中动态添加了一些对象,并且有一个JButton。运行我的程序时ArrayList为空,并且JButton设置为setEnabled(false)。我想在ArrayList中有2个或更多元素时启用我的按钮,如果ArrayList有一项或为空则再次禁用它。我该如何实现? 问题答案: 没有任何种类的通知机制。 我建议您编写自己的实现,该实现将委托给私有的实现

  • 我有一个rabbitListener,它连续异步地侦听队列“用户消息”的用户消息。除非队列中加载了大量消息,否则一切都正常。当消息批量发布到队列时,同一用户的消息首先被处理,从而其他用户的消息等待轮到他们。 我无法使用优先级队列,因为所有用户的优先级都相同。所以我想创建新的队列,并在运行时监听它们。一旦消息被使用,所有队列都将是短暂的。(队列将被删除) 在浏览时,我发现可以使用RabbitAdmi

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

  • 问题内容: 我想用JLabel替换JButton,并且希望我的代码在单击JLabel时执行一些操作。 当我拥有JButton时,我使用动作侦听器来处理按钮的单击: 当我替换为时,我在Eclipse中收到以下错误消息: 对于JLabel类型,未定义方法addActionListener(ChipsListener) 但我确实知道应该可以将单击处理程序附加到JLabel。有人知道该怎么做吗? 问题答案