RabbitListener绑定队列到多个交换

时间:2017-11-01 16:50:09

标签: rabbitmq spring-amqp spring-rabbit

我希望能够利用RabbitListener注释将队列绑定到多个交换,但到目前为止还没有成功。

我现在拥有的是:

@RabbitListener(bindings = @QueueBinding(value =
    @Queue(
        value = "${subscriber.queueInbound}", durable = "true", autoDelete = "false", exclusive = "false"),
        exchange = @Exchange(value = "all", durable = "true")
    ),
    containerFactory = "subscriberRabbitListenerContainerFactory"
)
public void onMessage(Message message, Channel channel) {
    // do something
}

这将在启动/重新连接时自动创建定义为subscriber.queueInbound的队列,并将此队列绑定到默认的all交换。

然后我在后台运行一个Job,然后正确配置此队列并将其绑定到需要配置的多个交换。

我正在寻找一种更优雅的方法,可以通过@RabbitListener或以某种方式调整它,以便在重新连接时重新配置队列,然后再重新监听。

最初我是通过Beans进行队列配置但是如果RabbitMQ不可用而导致应用程序启动,我解决了但是这会导致它启动并且不会执行队列配置步骤。

1 个答案:

答案 0 :(得分:0)

@RabbitListener(bindings = {
        @QueueBinding(value =
            @Queue(value = "foo"), exchange = @Exchange("ex1"), key="foo"),
        @QueueBinding(value =
            @Queue(value = "foo"), exchange = @Exchange("ex2"), key="bar")
})
public void listen(String in) {

}
  

最初我是通过Beans进行队列配置但是如果RabbitMQ不可用而导致应用程序启动,我解决了但是这会导致它启动并且不会执行队列配置步骤。

这意味着你正在做某事"非法"上下文初始化期间在上下文完全构建之前,您不应该尝试与RabbitMQ交谈。

只有在首次打开连接时才会在代理上声明Bean。