跳到主要内容
版本:4.1.1

消费者事件

Doubao 中英对照 Consumer Events

每当监听器(消费者)经历某种故障时,容器都会发布应用事件。事件 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 现在是 public 的,允许对其子类化。

致命错误始终以 ERROR 级别记录。这不可修改。

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

  • AsyncConsumerStartedEvent:消费者启动时。
  • AsyncConsumerRestartedEvent:消费者在故障后重启时——仅 SimpleMessageListenerContainer。
  • AsyncConsumerTerminatedEvent:消费者正常停止时。
  • AsyncConsumerStoppedEvent:消费者停止时——仅 SimpleMessageListenerContainer。
  • ConsumeOkEvent:从 broker 接收到 consumeOk 时,包含队列名和 consumerTag。
  • ListenerContainerIdleEvent:请参阅检测空闲的异步消费者。
  • MissingQueueEvent:检测到缺失队列时。