コンシューマーイベント
コンテナーは、リスナー (コンシューマー) で何らかの障害が発生するたびに、アプリケーションイベントを発行します。イベント 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
が公開され、サブクラス化できるようになりました。
チャネルクローズイベントのロギングも参照してください。
致命的なエラーは、常に ERROR
レベルで記録されます。これは変更できません。
コンテナーのライフサイクルのさまざまな段階で、他にもいくつかのイベントが発行されます。
AsyncConsumerStartedEvent
: コンシューマーが開始されたとき。AsyncConsumerRestartedEvent
: 障害後にコンシューマーが再起動されたとき -SimpleMessageListenerContainer
のみ。AsyncConsumerTerminatedEvent
: コンシューマーが正常に停止したとき。AsyncConsumerStoppedEvent
: コンシューマーが停止している場合 -SimpleMessageListenerContainer
のみ。ConsumeOkEvent
: ブローカからconsumeOk
を受信すると、キュー名とconsumerTag
が含まれますListenerContainerIdleEvent
: アイドル状態の非同期コンシューマーの検出を参照してください。MissingQueueEvent
: 不足しているキューが検出されたとき。