spring-RabbitMQ手动监听队列

时间:2018-05-16 21:00:13

标签: rabbitmq spring-amqp

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

我想实现如下:

制作人继续向扇出交换机发送消息。 当消费想要加入时,调用function1 - >创建队列并绑定到交换 - >消费信息 当消费想要离开时,调用function2 - >断开连接

1 个答案:

答案 0 :(得分:0)

有几个选择。

  1. 使用其中一种RabbitTemplate.receive()convertAndReceive()方法一次获取一条消息,如果没有消息,您可以设置receiveTimeout。< / p>

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

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

  4. ...

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

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

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