Consumer Events

无论何时监听器(消费者)遇到某种故障,容器都会发布应用程序事件。ListenerContainerConsumerFailedEvent 事件具有以下属性:

  • container:使用者遇到问题的监听器容器。

  • reason:失败的文字原因。

  • fatal:一个布尔值,指示失败是否致命。对于非致命异常,容器会根据 recoveryIntervalrecoveryBackoff(对于 SimpleMessageListenerContainer)或 monitorInterval(对于 DirectMessageListenerContainer)尝试重启使用者。

  • throwable:捕获的 Throwable

可以通过实现 ApplicationListener<ListenerContainerConsumerFailedEvent> 来消耗这些事件。

concurrentConsumers 大于 1 时,所有消费者都会发布系统级事件(如连接故障)。

如果消费者失败是因为它的一个队列正在被独占使用,默认情况下,除了发布事件外,还会发出 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:当检测到丢失的队列时。