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
出席。
我们正在从现有的经典队列迁移到仲裁队列,其中一项要求是我们必须将队列使用声明为“被动”(即 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
出席。