虽然最好将实例用作自动删除队列,但从 V2.1 开始,您可以将代理命名队列与侦听器容器一起使用。 以下示例演示如何执行此操作:AnonymousQueueSpring中文文档

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

请注意名称为空。 当声明队列时,它会使用代理返回的名称更新属性。 在配置容器时必须使用才能使其正常工作,以便容器可以在运行时访问声明的名称。 仅仅设置名称是不够的。StringRabbitAdminQueue.actualNamesetQueues()Spring中文文档

不能在容器运行时将代理命名的队列添加到容器中。
不能在容器运行时将代理命名的队列添加到容器中。
重置连接并建立新连接时,新队列将获得新名称。 由于在容器重新启动和重新声明的队列之间存在争用条件,因此请务必将容器的属性设置为 ,因为容器最初可能会尝试重新连接到旧队列。missingQueuesFatalfalse
重置连接并建立新连接时,新队列将获得新名称。 由于在容器重新启动和重新声明的队列之间存在争用条件,因此请务必将容器的属性设置为 ,因为容器最初可能会尝试重新连接到旧队列。missingQueuesFatalfalse