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