对于最新的稳定版本,请使用 Spring AMQP 3.2.0! |
容器和 Broker-Named 队列
虽然最好将实例用作自动删除队列,但从版本 2.1 开始,您可以将代理命名队列与侦听器容器一起使用。
以下示例显示了如何执行此操作:AnonymousQueue
@Bean
public Queue queue() {
return new Queue("", false, true, true);
}
@Bean
public SimpleMessageListenerContainer container() {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(cf());
container.setQueues(queue());
container.setMessageListener(m -> {
...
});
container.setMissingQueuesFatal(false);
return container;
}
请注意名称的空值。
当 declares queues 时,它会使用代理返回的名称更新属性。
您必须在配置容器时使用,以便容器可以在运行时访问声明的名称。
仅仅设置名称是不够的。String
RabbitAdmin
Queue.actualName
setQueues()
当容器运行时,您无法将代理命名的队列添加到容器中。 |
重置连接并建立新连接时,新队列将获得新名称。
由于容器重新启动和重新声明队列之间存在争用条件,因此将容器的属性设置为 非常重要,因为容器最初可能会尝试重新连接到旧队列。missingQueuesFatal false |