我希望能够利用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不可用而导致应用程序启动,我解决了但是这会导致它启动并且不会执行队列配置步骤。
答案 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。