跳到主要内容

消费者事件

DeepSeek V3 中英对照 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 级别)。ConditionalExceptionLogger 中添加了一个新方法 logRestart(),以便可以更改此行为。

此外,AbstractMessageListenerContainer.DefaultExclusiveConsumerLogger 现在已公开,允许对其进行子类化。

致命错误总是以 ERROR 级别记录。这是不可修改的。

在容器生命周期的各个阶段,还会发布一些其他事件:

  • AsyncConsumerStartedEvent: 当消费者启动时触发。

  • AsyncConsumerRestartedEvent: 当消费者在失败后重新启动时触发 - 仅适用于 SimpleMessageListenerContainer

  • AsyncConsumerTerminatedEvent: 当消费者正常停止时触发。

  • AsyncConsumerStoppedEvent: 当消费者停止时触发 - 仅适用于 SimpleMessageListenerContainer

  • ConsumeOkEvent: 当从代理接收到 consumeOk 时触发,包含队列名称和 consumerTag

  • ListenerContainerIdleEvent: 参见 检测空闲的异步消费者

  • MissingQueueEvent: 当检测到缺失的队列时触发。