消費者事件
當監聽器(消費者)發生某種故障時,容器會發布應用程式事件。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:當從代理收到consumeOk時,包含佇列名稱和consumerTag -
ListenerContainerIdleEvent:參見 檢測空閒非同步消費者。 -
MissingQueueEvent:當檢測到缺少佇列時。