1. ホーム
  2. java

2つのJVMを互いに対話させる方法

2023-09-28 21:30:46

質問

次のような状況です。

2つのJVMプロセス(実際には2つの java プロセス) がローカルマシン上で動作しています。それらを ProcessA と呼ぶことにします。 ProcessB .

互いに通信(データ交換)させたい(例えば ProcessA はメッセージを ProcessB にメッセージを送ります。)

現在、私は一時ファイルを書いて、これらのプロセスが定期的にこのファイルをスキャンしてメッセージを取得することで、この問題を回避しています。この解決策はあまりよくないと思います。

私が望むものを達成するためのより良い代替案は何でしょうか?

どのように解決するのですか?

複数のオプションの IPC :

ソケットベース (ベアボーン) ネットワーキング

  • 必ずしもハードではない , でも。
    • は、あまりないために冗長かもしれません。
    • は、より多くのコードを書くと、より多くのバグの表面を提供するかもしれません。
  • のような既存のフレームワークに依存することもできます。 Netty

RMI

  • 技術的にはそれもネットワーク通信ですが、それはあなたにとって透明なものです。

本格的なメッセージ パッシング アーキテクチャ

  • 通常、RMI またはネットワーク通信のいずれかに基づいて構築されるが、複雑な会話やワークフローをサポートする。
  • シンプルなものには重すぎるかもしれません。
  • のようなフレームワークでは ActiveMQ または JBoss メッセージング

Java 管理拡張 (JMX)

  • のためのものです。 JVMの管理および監視 しかし、もしあるプロセスが他のプロセスにデータを問い合わせたり、アクションのためのリクエストを送ったりしたい場合、それらがあまり複雑でなければ、あなたが望むものを実装するのに役立つかもしれません。
  • はまた、RMI (他の可能なプロトコルの中で) 上でも動作します。
  • を理解するのはそれほど簡単なことではありません。 を使うのは実はとても簡単です。

ファイル共有・ファイルロック

  • 今やっていること
  • それは可能だが、処理するための多くの問題がある。

信号

  • 他のプロジェクトにシグナルを送ることができます。
  • しかし、これはかなり限定的で、翻訳レイヤーを実装する必要があります(それは です。 は可能ですが、本格的なものよりも、おもちゃにするためのかなりクレイジーなアイデアです。

より詳細な情報がなければ、骨太のネットワークベースの IPC アプローチがベストのように思われます。

  • 最も拡張性が高い (新しい機能やワークフローを追加するという意味で)。

    • 最も軽量 (アプリのメモリフットプリントの観点から)
    • 最もシンプル (デザイン的に)
    • 最も教育的(IPCの実装方法を学ぶという意味で)である。 (コメントで "ソケットは難しい" と書かれていましたが、本当にそうではなく、取り組むべきものです)

    とはいえ、あなたの例(アクションを実行するために他のプロセスを単に要求する)に基づき、JMXはあなたにとって十分である可能性もあります。