3

メッセージの受け渡しに JMX-RMI エージェントを使用しています。名前/IDを持つメッセージを一連のリスナー/リスナーに送信するJavaプログラムがあります.リスナーが受信したメッセージに基づいて、クライアント側のプログラムはそれに応じて動作します.この作品は正常に動作しますが、どのようなJMX RMI エージェントには耐障害性が組み込まれています。

リスナーが誤って停止した場合、JMX はそれを再起動するか、エラーをどこかに記録しますか? どちらかの側のメッセージ キューがいっぱいの場合はどうなりますか? JMX RMI の基礎となるアーキテクチャーまたは組み込みのフォールト トレランス メカニズムを説明するドキュメントを歓迎します。フォールト トレランス メカニズムがない場合、どのような方法がよいでしょうか。

どうもありがとう

4

1 に答える 1

2

クライアント側のリスナーが標準のjavax.management.remoteコネクタを使用していると想定しています。カスタマイズをしなくても、簡単な障害検出を実装できると思います。フォールトトレランスについては、おそらくある種のクラスタリングソリューションを検討しているでしょう。

心配する必要のある接続には2つの層があります。

  1. MBeanServerConnection自体。つまり、サーバー側のJVM全体が終了した場合、クライアント側のプロセスはそれを知る必要があります。
  2. サーバーJVMと補助MBeanServerConnectionは引き続き使用可能ですが、「ホストされた」リスナー/クライアントメッセージフォワーダーサービス自体が停止/失敗/停止する可能性があります。

#1の場合、クライアントプロセスは、 addConnectionNotificationListenerメソッドを使用してNotificationListenerJMXConnectorに登録できます。ローカル接続は、次のすべてのイベントでJMXConnectionNotificationを発行します。

  • 新しいクライアント接続が開かれました。
  • クライアント接続が閉じられました。
  • クライアント接続が予期せず失敗しました。
  • クライアント接続で通知が失われる可能性があります。この通知はクライアント側にのみ表示されます。

このようにして、クライアントはサーバーへの接続が確立されて失われたことを知ることができます。

#2の場合、これはアプリケーションに少し固有ですが、おそらく次のような単純なパターンを適応させることができます。

リスナー/フォワーダーサービスが開始したら、開始通知を発行します。停止したら、停止通知を送信します。これらの通知に登録するリスナーの2つのカテゴリは次のとおりです。

  1. クライアントは、サービスが開始/停止したことを知っています。
  2. 「停止」をリッスンしてサービスを再開できるサーバー側の「ウォッチャー」。

それは多かれ少なかれあなたが考えていたものですか?

于 2011-05-31T13:26:47.573 に答える