3

RabbitMQのドキュメントには、シャットダウンリスナーを追加する方法と、リスナーが呼び出されたときが示されていますが、ハンドラーの目的がわかりません。そこにあるすべてのJavaの例(https://github.com/rabbitmq/rabbitmq-tutorialsを含む)はシャットダウンハンドラーを無視しているようです。どの場合、単に例外をキャッチShutdownSignalException(および)するよりもシャットダウンリスナーを優先する必要がありますか?IOException

もう1つの不可解な問題は、ハンドラーが終了したときに制御フローがどこに行くかということです。

関連する可能性のある関連するSOの質問:

4

2 に答える 2

4

IOExceptionをキャッチすると、メソッド呼び出しの結果として接続/チャネルのシャットダウンが発生したかどうかがわかりますが、サーバーへの接続が失われた場合など、接続/チャネルが意図せずにシャットダウンされることもあります。この場合、ShutdownListenerは、接続/チャネルの閉鎖を知る唯一の方法です。

シャットダウンリスナーは、接続/チャネルリカバリを提供するためによく使用されますが、確実にリカバリすること自体が課題です。これについては、 Lyraをチェックしてください。

于 2013-10-24T20:24:23.783 に答える
2

ShutdownListener私が見た主な用途は、自動再接続を行うことです。シャットダウンをリッスンし、シャットダウンが発生したら、再接続を試みます。

たとえば、これはrabbitmq-ha-clientの基礎であり、 HaConnectionFactory.HaShutdownListenerで実行されます。

于 2013-10-24T20:35:11.233 に答える