3

ActiveMQフェイルオーバーを使用しています。例:

failover:(tcp://host1:61616,tcp://host2:61616)

host1もhost2も利用できない場合にアラートを出したいのですが。

アプリケーションがすでにブローカーに接続している場合は、TransportListenerを介していつフェイルオーバーするかを検出できます。初期接続時には同じことはできません。ハングし、各ブローカーを繰り返し再試行します。これは、接続を継続して試行するという点で望ましい動作ですが、問題が発生していることも通知して、アラートを出したり、誰かが調べたりできるようにしたいのです。

1つの解決策は使用することです

failover:(tcp://host1:61616,tcp://host2:61616)?startupMaxReconnectAttempts=1

これは、各ホストを試行してから例外をスローすることを意味します。これは、アプリケーションがアラートを出してから再接続を試みることで処理できます。私のアプリケーションはActiveMQ再接続ロジックを効果的に複製する必要があるため、これは理想的ではありません。

初期接続時にブローカーの問題を検出するためのより良い方法はありますか?

4

1 に答える 1

3

簡単な答え:いいえ、クライアント(アプリケーション)の起動の観点から知る方法はありません。

長い答え:アプリケーションとして、次の場合にのみわかります:(startupMaxReconnectAttemptsを介して)使用可能なブローカーがまったくない場合、または1つのブローカーから別のブローカーに切り替える場合。フェイルオーバーメカニズムの全体的なポイントは、これらすべてをコンシューマーから隠すことであるため、これは予想される望ましい動作です。

おそらくいくつかの方法がありますが(たとえば、ブローカーの動的ネットワークを使用する)、提案するソリューションよりも多くのロジックが必要になります。

間違ったツールで問題を解決しようとしていると思います。フェイルオーバーメカニズム(最大再接続と適切なタイムアウト)を使用すると、問題が発生したときに通知を受け取ることができます(ブローカーがまったく利用できません)。他のブローカーの「健全性」または「接続性」には、別個のメカニズムが必要です(システムレベルで-監視ツールを使用-またはアプリケーションレベルで-uriリスト内のすべてのブローカーを存続させるための小さなメカニズムを開発します)

于 2013-03-19T03:45:43.040 に答える