消費者事件

當監聽器(消費者)遇到某種故障時,容器會發布應用事件。事件 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: 從 broker 接收到 consumeOk 時,包含佇列名稱和 consumerTag

  • ListenerContainerIdleEvent: 請參閱 檢測空閒非同步消費者

  • MissingQueueEvent: 檢測到缺失的佇列時。