消费者事件
每当监听器(消费者)遇到某种故障时,容器都会发布应用程序事件。
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
:请参阅 检测空闲的异步消费者。 -
MissingQueueEvent
:当检测到缺少队列时。