Consumer Events
无论何时监听器(消费者)遇到某种故障,容器都会发布应用程序事件。ListenerContainerConsumerFailedEvent
事件具有以下属性:
-
container
:使用者遇到问题的监听器容器。 -
reason
:失败的文字原因。 -
fatal
:一个布尔值,指示失败是否致命。对于非致命异常,容器会根据recoveryInterval
或recoveryBackoff
(对于SimpleMessageListenerContainer
)或monitorInterval
(对于DirectMessageListenerContainer
)尝试重启使用者。 -
throwable
:捕获的Throwable
。
可以通过实现 ApplicationListener<ListenerContainerConsumerFailedEvent>
来消耗这些事件。
当 |
如果消费者失败是因为它的一个队列正在被独占使用,默认情况下,除了发布事件外,还会发出 DEBUG
日志(从 3.1 开始,此前为 WARN)。要更改此日志行为,请在 AbstractMessageListenerContainer
实例的 exclusiveConsumerExceptionLogger
属性中提供一个自定义的 ConditionalExceptionLogger
。此外,SimpleMessageListenerContainer
消费者在遇到此类异常后的重新启动现在默认情况下记录在 DEBUG 级别(以前为 INFO)。已将新方法 logRestart()
添加到 ConditionalExceptionLogger
以允许对其进行更改。
此外,AbstractMessageListenerContainer.DefaultExclusiveConsumerLogger
现在是公开的,允许对其进行子类化。
致命错误始终在 ERROR
级别记录。此项不可修改。
容器生命周期不同阶段会发布其他一些事件:
-
AsyncConsumerStartedEvent
:在消费者启动时。 -
AsyncConsumerRestartedEvent
:在消费者因故障而重启后——仅SimpleMessageListenerContainer
。 -
AsyncConsumerTerminatedEvent
:在消费者正常停止时。 -
AsyncConsumerStoppedEvent
:在消费者停止时——仅SimpleMessageListenerContainer
。 -
ConsumeOkEvent
:当从代理收到一个consumeOk
时,它包含队列名称和consumerTag
。 -
ListenerContainerIdleEvent
:参见 Detecting Idle Asynchronous Consumers。 -
MissingQueueEvent
:当检测到丢失的队列时。