spring-RabbitMq 的 amqp 实现 - 它在内部使用 queueDeclarePassive 吗?

spring-amqp implementation of RabbitMq - does it internally use queueDeclarePassive?

我们正在从现有的经典队列迁移到仲裁队列,其中一项要求是我们必须将队列使用声明为“被动”(即 queueDeclarePassive)。目的是确保我们不会动态创建任何队列,只检查它是否存在(如果不存在则失败)然后连接。

我们有一个使用 spring-amqp 的遗留服务,我们像这样设置 SimpleMessageListenerContainer:

SimpleMessageListenerContainer container(ConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) {
    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    container.setQueueNames(queue().getName());

...

public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
    RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
    rabbitTemplate.getConnectionFactory().createConnection().createChannel(false);
    return rabbitTemplate;
}

我看不到将队列声明为“被动”的方法。在阅读 spring.io 文档时,我看到了 declarationRetries:

的描述

“被动队列声明失败时的重试次数。被动队列声明发生在消费者启动时,或者当从多个队列消费时,初始化期间并非所有队列都可用。”

这是否意味着 spring-amqp 在幕后使用了 queueDeclarePassive?这是否在任何地方明确记录?如果我不正确,我如何正确确保在此 amqp 用法中使用 queueDeclarePassive?

提前致谢!

Does this imply that spring-amqp uses queueDeclarePassive behind the scenes?

它没有暗示它,它明确说明了它。

queueDeclarePassive 侦听器容器在启动期间使用它来验证配置的队列是否存在。

默认情况下,SimpleMessageListenerContainer 会以 5 秒为间隔尝试 3 次,如果被动声明失败,容器将停止。可以配置尝试次数和间隔。

如果队列不存在,DirectMessageListenerContainer 将无限期地尝试被动声明队列,使用其 monitorInterval 属性.

Spring 如果应用程序上下文包含 Queue @Bean 并且存在 RabbitAdmin,AMQP 将仅执行 non-passive 队列声明(队列创建) @Bean 出席。