消费者事件

当监听器(消费者)遇到某种类型的故障时,容器会发布应用程序事件。事件 ListenerContainerConsumerFailedEvent 具有以下属性

  • container:发生问题的监听器容器。

  • reason:故障的文本原因。

  • fatal:一个布尔值,指示故障是否致命。对于非致命异常,容器会尝试根据 recoveryIntervalrecoveryBackoff(对于 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:当检测到丢失的队列时。