2 つの異なる Java プログラム間でリモート メソッド呼び出し (RMI) 機能が必要です。両方とも、特定のファイル (パラメーターとしてのファイル名) に対していくつかのバックエンド機能を順次実行することになっています。処理するファイルの数が多すぎる可能性があるため、リモート呼び出しを非同期で行う必要があります。呼び出しが同期的に行われることを除いて、Java RMI は完全に適合するため、最初は Java RMI を使用しました。これらは単純な Java プログラムであり、オーバーヘッドが大きすぎるため、アプリケーション サーバーにはデプロイしたくありません。また、複数のファイルを同時に実行する必要があるため、プログラムはスレッドセーフ モードで開発されます。そのための理想的な実装を提案してください。カスタム開発された API が無料で利用できる場合は、非常に役立ちます。
6 に答える
真の非同期呼び出しを行う方法は次のとおりです。
- NIO を使用して RMI を実装します。
- プロキシが呼び出されると、リクエストが NIO セレクターに置かれ、すぐに結果のフューチャーが呼び出し元に返されます。
- 各リクエストには一意のリクエスト ID が必要であり、その ID を持つレスポンスがサーバーから到着すると、適切な未来が解決される必要があります。
そのような非同期RMIについて私が知っている実装は1つだけです
これが実際にどのように実装されているかについて、シーケンス図を使用した適切な説明です。
2 つの異なる Java プログラム間でリモート メソッド呼び出し (RMI) 機能が必要です... リモート呼び出しを非同期で行う必要があります。
この 2 つの要件は相反するものです。RMI は Remote Method Invocation を意味し、call-and-return メソッド呼び出しのセマンティクスを意味します。call-and-return でなければメソッド呼び出しではないので、RMI でもありません。
JMS などのリスナーを持つテクノロジを調査する必要があります。
両方のアプリケーションが Java である (そしてこれからも Java である) ことが確実な場合は、JMS (Java Messaging Service) を使用する必要があります。通信は非同期で行われ、サード パーティのブローカー、つまりメッセージ キュー (ActiveMQ、または Glassfish などのアプリケーション サーバーに直接組み込まれているもの) も使用されます。
これを使用して MQ を送信すると、他のアプリケーションにメッセージが送信されます。
より柔軟性が必要で、一部のアプリケーションが別の言語で作成されている (または作成される予定である) 場合は、おそらく JMS の代わりに AMQP を使用する必要があります。