spring-RabbitMQ 手动监听队列

Jer*_* Su 3 rabbitmq spring-amqp

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

我想实现如下:

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

Gar*_*ell 5

有几种选择。

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

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

  3. 动态创建SimpleMessageListenerContainer(或DirectMessageListenerContainer) 并根据需要启动/停止它。

  4. ...

在所有情况下,您都可以使用 aRabbitAdmin来创建/绑定队列,对于除选项 1 之外的所有情况,它可能是一个自动删除队列,当消费者被取消时,该队列将被删除。使用选项 1,您必须使用非自动删除队列并使用RabbitAdmin.

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

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