2013-03-01 16 views
103

どのようなJMSとそれがどのようにAMQPの用語に関連しているのか理解しようとしています。 私はJMSがAPIであり、AMQPがプロトコルであることを知っています。ここでJMSとAMQP - RabbitMQ

は私の仮定(との質問にも)

  • のRabbitMQはAMQPプロトコルを使用している/利用RabbitMQの
  • Javaクライアントが接続するためにAMQPプロトコルのクライアントライブラリを使用する必要があります(むしろAMQPプロトコルを実装)
  • ここではJMS APIはどこで再生されますか? JMS APIはAMQPクライアントライブラリを使用してRabbitMQに接続する必要がありますか?
  • 通常、私たちはRabbitMQ、ActiveMQなどのメッセージブローカに接続するためにJMSを使用します。次に、AMQPの代わりにここで使用されるデフォルトのプロトコルは何ですか?

上記のうちいくつかはダムかもしれません。 :-)しかし、私の頭を包んでみようとしています。

+3

@KevinRave:選択された答えは、いくつかの主な点では間違っています。私はあなたがそれを見ることができるようにコメントを追加しました。 – brainOverflow

+0

@KevinRave私は答えを編集しました。今では論争の的になっている部分が置き換えられました。今、答えは完全にOKです – Freak

+0

私は誰が私の答えを編集したのか分かりませんでした。ケビンはポイント2で言っている。投票や提案をする前に常に慎重にお読みください – Freak

答えて

77

あなたの質問はちょっと混乱しており、質問紙では難しい質問に似ています:)(教師は常に複雑な質問をしています:DIはあなたが先生ではないことを願っています:)) 1。

ご存知のように:

Java Message Serviceの(JMS)APIは、2つの以上のクライアント間でメッセージを送信するためのJavaメッセージ指向ミドルウェア(MOM)APIです。 JMSは、Java Platform、Enterprise Editionの一部であり、Java Community Processの下でJSR 914として開発された仕様で定義されています。Java Enterprise Edition(Java EE)に基づくアプリケーションコンポーネントで、 、送信、受信、およびメッセージの読み取りを行います。これにより、分散アプリケーションのさまざまなコンポーネント間の通信を疎結合、信頼性、および非同期にすることができます

Wikipediaから):

アドバンスト・メッセージ・キューイング・プロトコル(AMQP)は、メッセージ指向ミドルウェアのためのオープン標準のアプリケーション層プロトコルです。 AMQPの機能を定義する は、メッセージオリエンテーション、キューイング、ルーティング (ポイントツーポイントおよびパブリッシュおよびサブスクライブを含む)、信頼性、および のセキュリティです。

そして(再びウィキペディアから)最も重要なこと:単にAPIを定義するJMSとは異なり

、AMQPは、ワイヤレベル プロトコルです。有線レベルプロトコルは、ネットワークを介してオクテットのストリームとして送信される データのフォーマットの記述です。実装言語の関係なく したがって、このデータ・フォーマットに準拠し メッセージを作成し解釈することができます任意のツールは、他の互換 ツールとの相互運用が可能

あなたが知っておくべきいくつかの重要な事柄:

  1. がでくださいAMQPはJMS APIを実装していないメッセージング技術です。
  2. JMSはAPIでAMQPはプロトコルなので、JMSのデフォルトプロトコルは何ですか。つまり、 アプリケーションは、WebLogic Webサービス を呼び出すときにHTTP/Sを接続プロトコルとして使用します。
  3. JMSはAPI仕様です。それはどんなプロトコルも使用しません。 JMSプロバイダ(ActiveMQなど)は、基盤となるプロトコルを使用して がJMS APIを実現する可能性があります。例:Apache ActiveMQは、AMQP、MQTT、OpenWire、REST(HTTP)、RSSとAtom、 Stomp、WSIF、WS Notification、XMPPプロトコルのいずれかの を使用できます。私はUsing JMS Transport as the Connection Protocolを読むことをお勧めします。

グッドラック:)

+11

'私はよくわかりませんが、AMQPもHTTP/Sプロトコルを使用していますが、AMQPはエンハンスメントはHTTPを介したメッセージングプロトコルである。それは正しくありません。** JMSは単純なHTTPを使用しますが、RabbitMQ/ActiveMqの場合、拡張プロトコルを使用します。それは正しくありません。** JMSはAPI仕様です。それはどんなプロトコルも使用しません。 ActiveMQのようなJMSプロバイダは、基盤となるプロトコルを使用してJMS APIを実現することができます。例:Apache ActiveMQは、AMQP、MQTT、OpenWire、REST(HTTP)、RSSとAtom、Stomp、WSIF、WS Notification、XMPPのいずれかのプロトコルを使用できます。 – brainOverflow

+0

私は答えを編集しました。今、論争の的になっている部分が置き換えられました。 – Freak

+0

@brainOverflow誰かが私の答えを編集していて、3番にあったこの不適切な点を与えたのはわかりません。あなたがポイント2で言うことを尋ねたので、常に投票したり提案を下す前に慎重にお読みください – Freak

13

JMS、それがJMSクライアントとメッセージングサーバー間のプロトコルを定義していない定義されたとき。 JMS APIを実装するJMSクライアントは、あらゆるプロトコルを使用してメッセージングサーバーと通信できます。クライアントはJMS APIに準拠する必要があります。それで全部です。 Ususally JMSクライアントは、メッセージングサーバーが理解できるカスタムプロトコルを使用します。

AMQPは、メッセージングクライアントとメッセージングサーバーの間のプロトコルです。 JMSクライアントは、メッセージングサーバーと通信するためのプロトコルとしてAMQPを使用できます。利用可能なクライアントもあります。

http://www.lshift.net/blog/2009/03/16/openamqs-jms-client-with-rabbitmq-server

-1

私はあなたの一部には、言っているthis documentationを探している可能性があり疑う:

JMSクライアントのvFabric RabbitMQのためのvFabric RabbitMQの ためのクライアントライブラリです。 vFabric RabbitMQはJMSプロバイダではありませんが、JMSキューおよびトピックメッセージングモデルをサポートするために必要な機能は です。 JMSクライアント for RabbitMQは、 RabbitMQ JavaクライアントAPIの上にJMS 1.1仕様を実装しているため、新規および既存のJMS アプリケーションは、詳細メッセージ キューイングプロトコル(AMQP)を通じてRabbitMQブローカと接続できます。

+0

Nope 。私が見ていたものではありません。しかし同様です。 –

27

まず始めにしましょう。

のRabbitMQワイヤプロトコルAMQP(アドバンスメッセージキューProtocol)を実装するアーラン(TLC指向プログラミング言語)とで展開MOM(ミドルウェア指向メッセージ)です。 現在、RabbitMQメッセージングサービスの使用を可能にするために、多くのクライアントAPI(Java、C++、RESTfulなど)が利用可能です。

JMS(Javaのメッセージングサービス)MOMによって実現される構造のAPI セットを定義JCP標準です。JMS APIを実装する(すなわち、互換性がある)MOMの例は、ActiveMQである。 HornetMQなどがあります。このようなミドルウェアはJMS APIを取得し、それに応じて交換パターンを実装します。

上記によると、RabbitMQとそのJavaクライアントAPIのインスタンスであるJMS APIのスケルトンを取り上げると、その時点でRabbitMQを使用してJMS実装を開発することが可能ですJMS仕様に従って交換パターン(RabbitMQ以上)を実装しています。

キーはです。JMSのような一連のAPIは、技術(この場合はRabbitMQ)に関係なく実装できます。

+0

素敵な説明! –

+0

TLCは何を表していますか? – mvmn

+0

@mvmm TLCはテレコミュニケーションの略です。どうぞ、[1]をご覧ください。 [1] https://www.allacronyms.com/TLC/Telecommunication –

8

JMSとAMQPについても同様の質問がありました。ここでの議論は質問に答えるが、 spring.ioからこのリンクはまた...

JMS APIはここに遊びに来るん

Understanding AMQP

1
  • をきれいにそれを説明し、見てみる価値は、それ故に共有しますか? JMS APIはAMQPクライアントライブラリを使用してRabbitMQに接続する必要がありますか?

JMSはAPIであるため、一部のJMS APIはAMQPプロトコル(Apache QPID JMSなど)で実装されていますが、ほとんどのJMS APIでは他のプロトコルが使用されています。 AMQPプロトコルのバージョンが同じであれば、そのようなクライアントは別のAMQPクライアントと通信できるはずです。

  • 通常、RabbitMQ、ActiveMQなどのメッセージブローカーに接続するためにJMSを使用します。AMQPの代わりにここで使用されるデフォルトのプロトコルは何ですか?

JMS APIの設定によって異なります。

0

https://spring.io/understanding/AMQP

ActiveMQのために、それは、AMQP可能性がありますが、デフォルトではそれはopenwire 'ですAMQP(アドバンスト・メッセージキュープロトコル)非同期メッセージングのための一般に公開ワイヤー 仕様です。送信されるすべてのバイト データが指定されます。この特徴により、ライブラリーは多くの言語で と書かれ、複数のオペレーティング・システムとCPU アーキテクチャーで実行されるため、相互運用可能なクロスプラットフォーム メッセージング標準が実現します。

AMQPは、Javaコミュニティの中で最も一般的な メッセージングシステムであるJMS(Java Message Service)とよく比較されます。 JMSの制限は、 というAPIが指定されていますが、メッセージの形式は指定されていません。 AMQPとは異なり、 JMSには、メッセージの形成方法と送信方法はありません。 基本的に、すべてのJMSブローカーは 異なる形式でメッセージを実装できます。彼らはちょうど同じAPIを使用する必要があります。

関連する問題