spring-RabbitMQ手动监听队列

spring-RabbitMQ manually listen to queue

我是 rabbitmq.I 的新手,正在使用 spring-amqp 来实现该功能。 正如我们所知 spring 提供 @RabbitListener 以在应用程序初始化时注册一个监听器到队列中。 我想设计一个功能,当我点击某个按钮时,将创建一个新的消费者并收听指定的队列。 Java 基础提供 channel.basicConsume() 方法来使用队列。 spring有提供这样的功能吗?

我想像这样实现:

生产者不断向扇出交换器发送消息。 当消费者想要加入时,调用函数1 -> 创建队列并绑定到交换 -> 消费消息。
当消费者想要离开时,调用 function2 -> disconnect

有几个选项。

  1. 使用RabbitTemplate.receive()convertAndReceive()方法之一一次获取一条消息,您可以设置一个receiveTimeout以防有没有消息。

  2. RabbitTemplate.execute() 带有一个回调,该回调获取一个您可以调用 basicConsume() 的频道。这是一个较低级别的选项,不会为您做任何转换。

  3. 动态创建 SimpleMessageListenerContainer(或 DirectMessageListenerContainer)并根据需要 start/stop。

  4. ...

在所有情况下,您可以使用 RabbitAdmin 到 create/bind 队列,对于除选项 1 之外的所有队列,它可能是一个自动删除队列,当消费者被取消时将被删除.使用选项 1,您将不得不使用非自动删除队列并使用 RabbitAdmin.

将其删除

我建议#3 使用纯 Spring AMQP 是最有效的。

您还可以使用 Spring 与入站通道适配器和发布-订阅通道的集成;这样你只需要一个队列(每个应用程序实例),然后为每个用户订阅一个新的 MessageHandler 频道。