消费者事件
当监听器(消费者)发生某种故障时,容器会发布应用程序事件。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:当检测到缺少队列时。