おそらく同じ物理マシン上に存在する JVM 間のマスター/スレーブ通信を必要とする Java アプリケーションを作成しています。Java EE アプリケーション サーバー (つまり JBoss) 内で実行される「マスター」サーバーがあり、「スレーブ」クライアントが接続し、通信のために自身を動的に登録します (つまり、マスターはサーバーの IP アドレス/ポートを認識しません)。そのため、事前に設定することはできません)。マスターサーバーは、スレーブにワークアウトするコントローラーとして機能し、スレーブは定期的に通知で応答するため、双方向通信が行われます。
私は当初、各サイドがサーバーになる RPC ベースのシステムを考えていましたが、複雑になる可能性があるため、開いているソケットがあり、やり取りするメカニズムを好みます。
メッセージがほとんどプリミティブ型である低レイテンシの通信メカニズムを探しているので、重大なシリアライゼーションは必要ありません。これが私が見たものです:
- RMI
- JMS: Java に組み込まれている「スレーブ」クライアントは、アプリケーション サーバー内の既存の ConnectionFactory に接続します。
- JAX-WS/RS: マスターとスレーブの両方が、双方向通信用の RPC インターフェースを公開するサーバーになります。
- JGroups/Hazelcast: 共有分散データ構造を使用して通信を促進します。
- Memcached/MongoDB: これらを「キュー」として使用して通信を容易にしますが、クライアントはポーリングする必要があるため、遅延が発生します。
- Thrift: これは永続的な接続を維持しているように見えますが、Thrift サーバーを JBoss に統合/埋め込む方法がわかりません
- WebSocket/Raw Socket: これは機能しますが、必要以上に多くのカスタム コードが必要です。
欠けている技術はありますか?
編集:また見た:
- JMX: クライアントを JBoss の JMX サーバーに接続し、双方向通信の JMX 通知を受信します。