web-dev-qa-db-ja.com

Java RMIとJMSの違いは何ですか?

Javaで分散アプリケーションを設計する場合、同じ種類の問題に対処するテクノロジーがいくつかあるようです。 Java Remote Method Invocation および-について簡単に読みました。 Java Message Service ですが、違いを実際に確認するのは困難です。Java JMSは非同期通信を使用するため、RMIはJMSよりも緊密に結合されているようですが、それ以外はそうではありません。大きな違いがあれば見てください。

  • それらの違いは何ですか?
  • それらの1つは他のものより新しいですか?
  • どちらが企業でより一般的/人気がありますか?
  • 彼らはお互いにどのような利点がありますか?
  • 一方が他方よりも優先されるのはいつですか?
  • 実装の難しさは大きく異なりますか?

私もそう思います ウェブサービス そして CORBA 同じ問題に対処します。

39
Jonas

リンゴとオレンジの2つを実際に比較することはできません。

RMIは、リモートプロシージャコール(RPC)の形式です。これは軽量のJava固有のAPIであり、通信時に発信者と受信者が利用可能であることを期待しています。

JMSは信頼性の高いメッセージングAPIです。 JMSプロバイダーは、さまざまなメッセージングシステム用に存在します。プロバイダーが実装していれば、一方の当事者が利用できない場合でも、メッセージを渡すことができます。私がよく知っている2つは、TIBCOとIBMMQです。

RMIは、保証された配信または非同期応答を処理しません。プロバイダーによっては、JMSが処理する場合があります。

JMSは、可用性という意味で疎結合を可能にします。 「Webサービス」は、プロトコルとデータの意味で疎結合を許可しますが、信頼できるメッセージングの方法で多くを指定しませんが、一部の実装にはこれが含まれ(Windows Communication Foundation)、一部には含まれません。

編集:コメントごとに改訂。 2010年にこの回答を書いたとき、私の経験は実際には1つのJMSプロバイダーのみであり、デフォルトのJMSプロバイダーがないことを実際には知りませんでした。

32
codenheim

あなたはすでにメソッド呼び出しについて知っています。メソッドを呼び出したいオブジェクトが別のコンピューター上にある場合はどうなりますか? RMIを使用して、一方のコンピューター(クライアント)からもう一方のコンピューター(サーバー)に通話を送信します。クライアントは、結果がサーバーから返されるまで待機(または「ブロック」)します。これは同期操作と呼ばれます。

JMSは異なります。つまり、あるコンピューターが別のコンピューターにメッセージを送信できるようにします(電子メールのように)。最初のものは応答を待つ必要はありません:それはそれが望むどんな仕事でもし続けることができます。応答さえないかもしれません。 2つのコンピュータシステムは必ずしも正確にステップで動作するとは限らないため、これは非同期と呼ばれます。

違いについての別の考え方:RMIは電話をかけるようなものであり、JMSはテキストメッセージを送信するようなものです。

RMIはJMSより少し古いですが、それは実際には関係ありません。 2つの概念は、Javaよりもはるかに古いものです。

複雑さには大きな違いはありません。それぞれについてチュートリアルをやってみるべきだと思います。 [〜#〜] rmi [〜#〜] および [〜#〜] jms [〜#〜]

プロジェクトを最初から開始していて、どちらを使用するかわからない場合は、おそらく同期/非同期の問題が最善の決定要因です。既存のシステムで作業している場合は、あまり多くの新しいテクノロジーを導入しないことがおそらく最善です。したがって、すでに使用している場合は、それを使用するのがおそらく最善だと思います。

44
John