消费者事件
当容器检测到监听器(消费者)发生某种类型的故障时,会发布应用程序事件。事件 ListenerContainerConsumerFailedEvent 具有以下属性:
-
container: 消费者遇到问题的监听容器。 -
reason: 失败的文本原因。 -
fatal: 一个布尔值,指示失败是否为致命的。
对于非致命异常,容器会根据recoveryInterval或recoveryBackoff(针对SimpleMessageListenerContainer)或monitorInterval(针对DirectMessageListenerContainer)尝试重启消费者。 -
throwable: 被捕获的Throwable。
这些事件可以通过实现 ApplicationListener<ListenerContainerConsumerFailedEvent> 来消费。
系统范围内的事件(如连接失败)由所有消费者发布,当 concurrentConsumers 大于 1 时。 |
如果消费者因其中一个队列被独占使用而失败,从 3.1 版本开始,默认情况下,在发布事件的同时还会记录一条 DEBUG 级日志(此前为 WARN 级别)。
要更改此日志行为,请在 AbstractMessageListenerContainer 实例的 exclusiveConsumerExceptionLogger 属性中提供自定义的 ConditionalExceptionLogger。
此外,此类异常发生后,SimpleMessageListenerContainer 消费者自动重启的行为现在默认以 DEBUG 级别记录(此前为 INFO 级别)。
已在 ConditionalExceptionLogger 中新增一个方法 logRestart(),以便对此进行修改。
此外,AbstractMessageListenerContainer.DefaultExclusiveConsumerLogger 现在是公开的,允许对其进行子类化。
请参阅 日志通道关闭事件。
致命错误始终以 ERROR 级别记录。此级别不可修改。
容器生命周期的各个阶段还会发布其他事件:
-
AsyncConsumerStartedEvent: 当消费者启动时。 -
AsyncConsumerRestartedEvent: 当消费者在发生故障后重启时 -SimpleMessageListenerContainer仅限此情况。 -
AsyncConsumerTerminatedEvent: 当消费者正常停止时。 -
AsyncConsumerStoppedEvent: 当消费者被停止时 - 仅SimpleMessageListenerContainer。 -
ConsumeOkEvent: 当从代理接收到consumeOk时,包含队列名称和consumerTag -
ListenerContainerIdleEvent: 查看 检测空闲异步消费者。 -
MissingQueueEvent: 当检测到缺失的队列时。