spring-RabbitMQ手动监听队列
spring-RabbitMQ manually listen to queue
我是 rabbitmq.I 的新手,正在使用 spring-amqp 来实现该功能。
正如我们所知 spring 提供 @RabbitListener 以在应用程序初始化时注册一个监听器到队列中。
我想设计一个功能,当我点击某个按钮时,将创建一个新的消费者并收听指定的队列。
Java 基础提供 channel.basicConsume() 方法来使用队列。
spring有提供这样的功能吗?
我想像这样实现:
生产者不断向扇出交换器发送消息。
当消费者想要加入时,调用函数1 -> 创建队列并绑定到交换 -> 消费消息。
当消费者想要离开时,调用 function2 -> disconnect
有几个选项。
使用RabbitTemplate.receive()
或convertAndReceive()
方法之一一次获取一条消息,您可以设置一个receiveTimeout
以防有没有消息。
RabbitTemplate.execute()
带有一个回调,该回调获取一个您可以调用 basicConsume()
的频道。这是一个较低级别的选项,不会为您做任何转换。
动态创建 SimpleMessageListenerContainer
(或 DirectMessageListenerContainer
)并根据需要 start/stop。
...
在所有情况下,您可以使用 RabbitAdmin
到 create/bind 队列,对于除选项 1 之外的所有队列,它可能是一个自动删除队列,当消费者被取消时将被删除.使用选项 1,您将不得不使用非自动删除队列并使用 RabbitAdmin
.
将其删除
我建议#3 使用纯 Spring AMQP 是最有效的。
您还可以使用 Spring 与入站通道适配器和发布-订阅通道的集成;这样你只需要一个队列(每个应用程序实例),然后为每个用户订阅一个新的 MessageHandler
频道。
我是 rabbitmq.I 的新手,正在使用 spring-amqp 来实现该功能。 正如我们所知 spring 提供 @RabbitListener 以在应用程序初始化时注册一个监听器到队列中。 我想设计一个功能,当我点击某个按钮时,将创建一个新的消费者并收听指定的队列。 Java 基础提供 channel.basicConsume() 方法来使用队列。 spring有提供这样的功能吗?
我想像这样实现:
生产者不断向扇出交换器发送消息。
当消费者想要加入时,调用函数1 -> 创建队列并绑定到交换 -> 消费消息。
当消费者想要离开时,调用 function2 -> disconnect
有几个选项。
使用
RabbitTemplate.receive()
或convertAndReceive()
方法之一一次获取一条消息,您可以设置一个receiveTimeout
以防有没有消息。RabbitTemplate.execute()
带有一个回调,该回调获取一个您可以调用basicConsume()
的频道。这是一个较低级别的选项,不会为您做任何转换。动态创建
SimpleMessageListenerContainer
(或DirectMessageListenerContainer
)并根据需要 start/stop。...
在所有情况下,您可以使用 RabbitAdmin
到 create/bind 队列,对于除选项 1 之外的所有队列,它可能是一个自动删除队列,当消费者被取消时将被删除.使用选项 1,您将不得不使用非自动删除队列并使用 RabbitAdmin
.
我建议#3 使用纯 Spring AMQP 是最有效的。
您还可以使用 Spring 与入站通道适配器和发布-订阅通道的集成;这样你只需要一个队列(每个应用程序实例),然后为每个用户订阅一个新的 MessageHandler
频道。