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

7tofc5zh  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(1)|浏览(196)

我们正在从现有的传统队列迁移到仲裁队列,其中一个要求是必须将队列使用声明为“passive”(即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;
}

我看不出有什么方法可以将队列声明为“passive”。在阅读spring.io文档时,我看到了对declarationRetries的描述:
当被动队列声明失败时得重试次数.当使用者启动时,或者当从多个队列使用时,当初始化期间不是所有队列都可用时,发生被动队列声明.
这是否意味着spring-amqp在幕后使用queueDeclarePassive?这是否在任何地方明确地记录下来?如果我不正确,我如何正确地确保queueDeclarePassive在这个amqp用法中使用?
提前感谢!

k3bvogb1

k3bvogb11#

这是否意味着spring-amqp在幕后使用queueDeclarePassive?
它并没有暗示它,它明确地陈述了它。
queueDeclarePassive由侦听器容器在启动期间使用,以验证配置的队列是否存在。
默认情况下,SimpleMessageListenerContainer将尝试3次,每次间隔5秒,如果被动声明失败,容器将停止。尝试次数和间隔可以配置。
如果队列不存在,DirectMessageListenerContainer将使用其monitorInterval属性无限期地尝试被动声明队列。
如果应用程序上下文包含Queue@Bean,并且存在RabbitAdmin@Bean,Spring AMQP将仅执行非被动队列声明(队列创建)。

相关问题