コンシューマーイベント
コンテナーは、リスナー (コンシューマー) で何らかの障害が発生するたびに、アプリケーションイベントを発行します。イベント 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: 不足しているキューが検出されたとき。