消費者事件
當監聽器(消費者)遇到某種故障時,容器會發布應用事件。事件 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
現在是公共的,允許對其進行子類化。
另請參閱 記錄通道關閉事件。
致命錯誤始終以 ERROR
級別記錄。這是不可修改的。
在容器生命週期的各個階段還會發布其他幾個事件:
-
AsyncConsumerStartedEvent
: 消費者啟動時。 -
AsyncConsumerRestartedEvent
: 消費者在失敗後重啟時 - 僅適用於SimpleMessageListenerContainer
。 -
AsyncConsumerTerminatedEvent
: 消費者正常停止時。 -
AsyncConsumerStoppedEvent
: 消費者停止時 - 僅適用於SimpleMessageListenerContainer
。 -
ConsumeOkEvent
: 從 broker 接收到consumeOk
時,包含佇列名稱和consumerTag
。 -
ListenerContainerIdleEvent
: 請參閱 檢測空閒非同步消費者。 -
MissingQueueEvent
: 檢測到缺失的佇列時。