Spring-AMQP の優れた機能の 1 つは、ブローカーがダウンしてから復帰したときに、Spring アプリケーションをメッセージ ブローカーに再接続するために必要なロジックを実装しているように見えることです。
私が探しているのは、このような切断/再接続イベントがアプリケーション内でいつ発生したかを検出するための推奨される方法です。
これまでに思いついた最良の方法は、定期的にコネクション ファクトリからチャネルを取得しようとするポーリングのようなメカニズムです。
前もって感謝します!
Spring-AMQP の優れた機能の 1 つは、ブローカーがダウンしてから復帰したときに、Spring アプリケーションをメッセージ ブローカーに再接続するために必要なロジックを実装しているように見えることです。
私が探しているのは、このような切断/再接続イベントがアプリケーション内でいつ発生したかを検出するための推奨される方法です。
これまでに思いついた最良の方法は、定期的にコネクション ファクトリからチャネルを取得しようとするポーリングのようなメカニズムです。
前もって感謝します!
「改善」のJIRA 課題を自由に開いてくださいApplicationEvent
。接続が失われた (および再確立された) ときにを発行できます。その後、そのイベントをサブスクライブできますApplicationListener
。
SimpleMessageListenerContainer
それまでの間、ロギング サブシステムを介して何かを行うことができます。たとえば、Log4J を使用すると、次のようなカテゴリでログを取得するカスタム アペンダーを作成できます。
16:05:50.042 WARN [SimpleAsyncTaskExecutor-6][org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer] Consumer raised exception, processing can restart if the connection factory supports it. Exception summary: com.rabbitmq.client.ShutdownSignalException: connection error; reason: {#method<connection.close>(reply-code=320, reply-text=CONNECTION_FORCED - broker forced connection closure with reason 'shutdown', class-id=0, method-id=0), null, ""}
16:05:55.048 WARN [SimpleAsyncTaskExecutor-7][org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer] Consumer raised exception, processing can restart if the connection factory supports it. Exception summary: org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused
編集:
ConnectionListener
実装を接続ファクトリーに登録できるインターフェースもあります。それを使用して新しい接続を知ることができますが、onClose()
現在、ファクトリを破棄することによって接続が明示的に閉じられた場合にのみ呼び出されます。
ただし、onCreate()
接続へのハンドルが提供されるため、そのメソッドを時々呼び出すことができますがisOpen()
、メソッド自体でそれを行わないでくださいonCreate()
。接続を保存してください。onCreate()
すべてが計画どおりに機能するには、 を終了する必要があります。