RabbitMQ/Spring:如果目前的独家消费者注册,另一位独家消费者会注册吗?
问题描述:
我有一个在cloudfoundry上运行多个实例的spring应用程序。 这些实例共享一个数据库。他们有配置像这样一个RabbitListener
:如果需要的物品从某个源重新导入RabbitMQ/Spring:如果目前的独家消费者注册,另一位独家消费者会注册吗?
@RabbitListener(queues = "${items.updated.queue}", exclusive = true)
队列获得消息。
我只希望一个实例执行导入。根据我的理解,这可以通过专有标志来实现。
现在,如果当前的exclusive consumer
崩溃会发生什么? 另一个当前正在运行的实例将自己注册为新的exclusive consumer
?或者只有在应用程序启动时才进行注册?
答
是的,另一位消费者将被授予访问权限。
消费者将重新尝试每消耗recoveryInterval
毫秒(默认5000-5秒)。
您可以通过在侦听器容器中设置间隔或recoveryBackoff
来更改此设置。
请注意,您将从容器获取关于失败的WARN日志以及来自连接工厂的信息日志,该信息由于失败而关闭。
您可以调整日志级别以减少这些日志,也可以将自定义ConditionalExceptionLogger
注入容器和工厂。
如果消费者失败,因为如果一个消费者的队列被独占使用(默认情况下),并且发布该事件,则会发出WARN日志。要更改此日志记录行为,请在
SimpleMessageListenerContainer
的exclusiveConsumerExceptionLogger
属性中提供自定义ConditionalExceptionLogger
。另请参阅“记录通道关闭事件”一节。