消费者事件

当容器检测到监听器(消费者)发生某种类型的故障时,会发布应用程序事件。事件 ListenerContainerConsumerFailedEvent 具有以下属性:spring-doc.cadn.net.cn

  • container: 消费者遇到问题的监听容器。spring-doc.cadn.net.cn

  • reason: 失败的文本原因。spring-doc.cadn.net.cn

  • fatal: 一个布尔值,指示失败是否为致命的。
    对于非致命异常,容器会根据 recoveryIntervalrecoveryBackoff(针对 SimpleMessageListenerContainer)或 monitorInterval(针对 DirectMessageListenerContainer)尝试重启消费者。spring-doc.cadn.net.cn

  • throwable: 被捕获的 Throwablespring-doc.cadn.net.cn

这些事件可以通过实现 ApplicationListener<ListenerContainerConsumerFailedEvent> 来消费。spring-doc.cadn.net.cn

系统范围内的事件(如连接失败)由所有消费者发布,当 concurrentConsumers 大于 1 时。

如果消费者因其中一个队列被独占使用而失败,从 3.1 版本开始,默认情况下,在发布事件的同时还会记录一条 DEBUG 级日志(此前为 WARN 级别)。
要更改此日志行为,请在 AbstractMessageListenerContainer 实例的 exclusiveConsumerExceptionLogger 属性中提供自定义的 ConditionalExceptionLogger
此外,此类异常发生后,SimpleMessageListenerContainer 消费者自动重启的行为现在默认以 DEBUG 级别记录(此前为 INFO 级别)。
已在 ConditionalExceptionLogger 中新增一个方法 logRestart(),以便对此进行修改。spring-doc.cadn.net.cn

此外,AbstractMessageListenerContainer.DefaultExclusiveConsumerLogger 现在是公开的,允许对其进行子类化。spring-doc.cadn.net.cn

致命错误始终以 ERROR 级别记录。此级别不可修改。spring-doc.cadn.net.cn

容器生命周期的各个阶段还会发布其他事件:spring-doc.cadn.net.cn