此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring AMQP 3.2.6spring-doc.cadn.net.cn

容器和代理命名队列

虽然最好使用AnonymousQueue实例作为自动删除队列,从 2.1 版开始,您可以将代理命名队列与侦听器容器一起使用。以下示例显示了如何执行此作:spring-doc.cadn.net.cn

@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;
}

注意空的String为名称。当RabbitAdmin声明队列,它会更新Queue.actualName属性,其名称由代理返回。您必须使用setQueues()当您配置容器使其正常工作时,以便容器可以在运行时访问声明的名称。仅设置名称是不够的。spring-doc.cadn.net.cn

您无法在容器运行时将代理命名的队列添加到容器中。
当连接被重置并建立新连接时,新队列将获得一个新名称。由于容器重新启动和重新声明队列之间存在竞争条件,因此将容器的missingQueuesFatal属性设置为false,因为容器最初可能会尝试重新连接到旧队列。