消費者事件
每當監聽器 (消費者) 遇到某種故障時,容器就會發布應用程式事件。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)。已將新的方法 logRestart()
新增至 ConditionalExceptionLogger
,以允許變更此行為。
此外,AbstractMessageListenerContainer.DefaultExclusiveConsumerLogger
現在為 public,允許對其進行子類別化。
另請參閱 記錄通道關閉事件。
致命錯誤一律以 ERROR
層級記錄。這是無法修改的。
還有其他幾個事件會在容器生命週期的各個階段發布
-
AsyncConsumerStartedEvent
:消費者啟動時。 -
AsyncConsumerRestartedEvent
:消費者在故障後重新啟動時 - 僅限SimpleMessageListenerContainer
。 -
AsyncConsumerTerminatedEvent
:消費者正常停止時。 -
AsyncConsumerStoppedEvent
:消費者停止時 - 僅限SimpleMessageListenerContainer
。 -
ConsumeOkEvent
:當從 Broker 收到consumeOk
時,包含佇列名稱和consumerTag
-
ListenerContainerIdleEvent
:請參閱 偵測閒置的非同步消費者。 -
MissingQueueEvent
:偵測到遺失的佇列時。