RabbitMQ/Spring:如果目前的独家消费者注册,另一位独家消费者会注册吗?

问题描述:

我有一个在cloudfoundry上运行多个实例的spring应用程序。 这些实例共享一个数据库。他们有配置像这样一个RabbitListener:如果需要的物品从某个源重新导入RabbitMQ/Spring:如果目前的独家消费者注册,另一位独家消费者会注册吗?

@RabbitListener(queues = "${items.updated.queue}", exclusive = true) 

队列获得消息。

我只希望一个实例执行导入。根据我的理解,这可以通过专有标志来实现。

现在,如果当前的exclusive consumer崩溃会发生什么? 另一个当前正在运行的实例将自己注册为新的exclusive consumer?或者只有在应用程序启动时才进行注册?

是的,另一位消费者将被授予访问权限。

消费者将重新尝试每消耗recoveryInterval毫秒(默认5000-5秒)。

您可以通过在侦听器容器中设置间隔或recoveryBackoff来更改此设置。

请注意,您将从容器获取关于失败的WARN日志以及来自连接工厂的信息日志,该信息由于失败而关闭。

您可以调整日志级别以减少这些日志,也可以将自定义ConditionalExceptionLogger注入容器和工厂。

请参阅the documentation

如果消费者失败,因为如果一个消费者的队列被独占使用(默认情况下),并且发布该事件,则会发出WARN日志。要更改此日志记录行为,请在SimpleMessageListenerContainerexclusiveConsumerExceptionLogger属性中提供自定义ConditionalExceptionLogger。另请参阅“记录通道关闭事件”一节。