2

分散 Java アプリケーションの JMX インターフェースを拡張する必要があります。JMX を選択する理由は、データ公開の単純さです。これらの分散アプリケーションは、JMS サーバー (activemq 5.7) に接続された複数の異なるマシンに存在します (このサーバーは別の JMS サーバーに接続され、2 つのネットワーク (これも activemq 5.7) をブリッジします)。

私がやりたいことは、JMS ネットワークのどこからでも個々のサーバーのリモート JMX インターフェースにアクセスできるようにすることです。通常の RMI インターフェイスを介してアクセスするかのように、完全な JMX アクセスが必要です。それはあらゆる種類の行動を意味します。

リモート jmx インターフェースを JMS サーバーと通信させるために用語を使用できることを理解しています。そこから、ブリッジを使用してそれらにアクセスできるようにする必要があります (正しく構成されていると仮定します)

これは良いアプローチですか?誰かがこの目的のために用語を試しましたか? 私が見つけられなかったかもしれない他のオプションはありますか?

プラン B は apache camel RMI モジュールを使用することかもしれませんが、専門用語がオプションである場合、これよりもはるかにプラグ アンド プレイになるようです。

4

3 に答える 3

3

悪い道ではないと思います。私が考えることができるJMSを使用することの1つの欠点は、ほとんどのJMS実装が依存しているブローカーへの依存です。

一方、検出、非同期JMX呼び出し、pub / subマルチキャストスタイルのJMX操作など、1つの操作要求を発行し、すべてのMBeanServerから応答を受信できる興味深い機能がいくつかあります。

私は実際の実装を知りませんが、おそらく実装するのはそれほど難しくありません。各ターゲットJVMに、次のような構成済みのクライアントが必要です。

  1. JMXリクエストをリッスンする:リスナーはリクエストをアンマーシャリングします(これはMBeanServerConnectionメソッド呼び出しのエンコーディングである必要があります)。pub / subスタイルの呼び出しに共通のトピックを使用して、マーシャリングされた結果を要求メッセージのJMSReplyToプロパティで指定された宛先に返します。それ以外の場合は、JVMごとにキューを割り当てるか、JVMごとに一意の識別子を選択してメッセージセレクターを使用できます。
  2. JMX通知を実装する場合は、目的の通知を登録し、受信時に指定されたJMS宛先に転送するプロキシNotificationListenerを実装する必要があります。

また、標準に準拠しているため、環境にスムーズに統合できる本格的なjavax.management.remote実装の実装を検討することもできます。

OpenDMKプロジェクトは、JMXサーバーとクライアントの拡張/実装に非常に役立つことがわかりました。このライブラリは、「カスタム」プロトコルを使用して標準のJMXリモーティングソリューションを実装するための基本的な構成要素を提供します。基本的に、トランスポートおよび呼び出しメカニズムとして機能するjavax.management.remote.generic.MessageConnectionを実装します。すべてのJMX呼び出し、応答、およびコールバックは、javax.management.remote.message.Messageのインスタンスにシリアル化され、すべてシリアル化可能であるため、JMSObjectMessageへの書き込みおよびJMSObjectMessageからの読み取りに問題はありません。

このアプローチから得られる追加の利点は次のとおりです。

  1. クラスパスを正しく構成すれば、JConsoleなどの標準のJMXツールを使用してJVMに接続できるはずです。
  2. OpenDMKは、すべてのMBeanServerインスタンスを表示し、1つの中央MBeanServerを介してアクセスできるようにするMBeanServerをフェデレーションする機能も提供します。この機能には、標準のJMXリモーティング実装が必要です。
  3. OpenDMKは、興味深いサービス検出プロトコルも実装しており、生のマルチキャストや、JMSプロトコルとうまく調和する「電話ホーム」アプローチなど、いくつかの異なる種類があります。

興味があれば、OpenDMKのmavenizedプロジェクトをここに投稿しました。

nettyを使用してJavaエージェント用の基本的なJMXクライアントを実装しており、オプションで非同期JMX要求をサポートしています。応答は、「逆」MBeanServerConnectionのような登録済みリスナーを介して配信されます。これが役立つ場合は、ここでソースを見つけてください。

于 2012-12-19T13:32:57.843 に答える
2

Jolokia (http://www.jolokia.org/) も、REST と JSON を使用して JMX にリモート アクセスするための優れたプロジェクトです。これは自動的に行われます。バッチ操作もサポートします。それを見てみることをお勧めします。

JMX を使用して AMQ 統計を取得する場合、プラグインが提供されるため、JMX の代わりに JMS メッセージングを使用して統計を取得できます: http://activemq.apache.org/statisticsplugin.html

于 2012-12-20T05:10:26.767 に答える
0

JMS を使用して関心のあるサーバーの URL を検出し、それ以降はプレーンな JMX を使用します。すべての RMI 呼び出しを JMS 経由で送信する利点がわかりません。

于 2012-12-19T11:05:11.573 に答える