2

MessageListenerがあるため、JMS接続を常に開いたままにします。

長期間有効なJMS接続を使用するアプリケーションのメンテナンスを最小限に抑えることを心配する必要があるのは一般的ですか?

私は、一時的な接続障害など、よく知られている一般的な種類の障害から回復しようと考えていました。

4

3 に答える 3

3

優れた JMS プロバイダーは、ソケットのドロップやメッセージ ブローカーのフェイルオーバーや再起動などのネットワーク停止に対処します。たとえば、Apache ActiveMQで自動再接続を有効にする方法は次のとおりです。

すべての JMS リソース (接続、セッション、プロデューサー、コンシューマー) を再作成するのは非常に面倒なことがよくありますが、JMS プロバイダーがそれを行う方がはるかに簡単です。

この機能をサポートできないプロバイダーを使用する必要がある場合は、切り替えるか、これの一部を実行できる Spring JMS ヘルパー クラスを使用することを検討してください。

于 2008-12-04T13:05:57.187 に答える
1

私が知っている標準の JMS 仕様には、接続の問題がアプリケーションに表示されないことを保証するものは何もありません。拡張機能としてこれを行うベンダーがいくつかあるかもしれません (James Strachan が示唆しているように)。

ベンダーの拡張機能に依存しない堅牢な JMS クライアントが必要な場合は、エラーを処理して再接続する必要があります。JMS リスナーを JBossMQ に再接続するを参照してください(タイトルにもかかわらず、JBossMQ 固有ではありません)。

于 2008-12-04T16:48:55.443 に答える
1

次の 2 つのケースを処理する必要があります。

  1. ユーザーと JMS サーバー間のファイアウォール。ほとんどのファイアウォールは、数時間後に「アイドル」接続を切断します。このような場合は、約 1 時間ごとにメッセージを送信するか、可能であれば TCP_KEEPALIVE を有効にします。これは、基盤となるソケットがしばらくしてからテスト メッセージを送信するようにする TCP/IP オプションです。
  2. もう一方のサーバーが再起動されます。これが発生すると、次のメッセージを送信しようとすると、「接続が失われました」というエラーが表示されます。この場合は、もう一度接続を開いてからやり直してください。

ローカル JMS サーバーをインストールし (何でも構いません)、アプリを接続してサーバーを停止することをお勧めします。これにより、ケース #2 で予想されるエラー メッセージが表示されます。次に、MockRunnerで単体テストを作成して、エラー処理が正しいことを確認します。

于 2008-12-04T12:44:17.233 に答える