コンシューマーイベント

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