消費者事件

每當監聽器 (消費者) 遇到某種故障時,容器就會發布應用程式事件。ListenerContainerConsumerFailedEvent 事件具有下列屬性

  • container:消費者遇到問題的監聽器容器。

  • reason:故障的文字原因。

  • fatal:布林值,指出故障是否為致命性。對於非致命性例外,容器會嘗試根據 recoveryIntervalrecoveryBackoff (適用於 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:偵測到遺失的佇列時。