JMSとAMQP-RabbitMQ


133

JMSと、それがAMQP用語にどのように関連付けられているかを理解しようとしています。JMSはAPIであり、AMQPはプロトコルです。

これが私の仮定です(そして質問も)

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

上記のいくつかはばかげているかもしれません。:-)しかし、私の頭を包み込もうとしています。


3
@KevinRave:選択された答えはそれが作るいくつかの主要な点で間違っています。見ていただけるようにコメントを追加しました。
2020年

@KevinRave回答を編集しました。問題のある部分は置き換えられました。回答全体は完全に問題ありません
Freak

私はすでにケビンは2.Alwaysは前投票ダウンや提案を行うことをよくお読みの時点で言っている事を求めているので、私は...私の答えを編集し、NUM 3にあったこの不適切なポイントを与えた人を知らない
フリーク

1
この記事のJMSセクションをご覧ください。それは非常に詳細な説明があるsaipraveenblog.wordpress.com/2014/12/08/...
java_geek

回答:


118

あなたの質問は少し厄介で、質問用紙の難しい質問に似ています:)(教師は常に単純な質問をして複雑にする:DIあなたが教師ではないことを願っています:))これらすべてを1つずつ見てみましょう。

あなたが知っているように:

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

ウィキペディアから):

Advanced Message Queuing Protocol(AMQP)は、メッセージ指向ミドルウェア向けのオープンスタンダードのアプリケーション層プロトコルです。AMQPの特徴は、メッセージ指向、キューイング、ルーティング(ポイントツーポイントおよびパブリッシュアンドサブスクライブを含む)、信頼性およびセキュリティです。

そして、最も重要なこと(再びWikipediaから):

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通知、XMPPのいずれかのプロトコルを使用できます。「JMSトランスポートを接続プロトコルとして使用する」を読むことをお勧めします。

幸運を :)


20
I am not sure but I believe that AMQP also uses HTTP/S protocol but AMQP is enhacement is messaging protocol over HTTPいいえ。それは正しくありません。 JMS uses simple HTTP but for RabbitMQ/ActiveMq, they uses enhanced protocol.いいえ。それは正しくありません。JMSは単なるAPI仕様です。プロトコルは使用しません。JMSプロバイダー(ActiveMQなど)は、基盤となるプロトコルを使用してJMS APIを実現できます。例:Apache ActiveMQは、AMQP、MQTT、OpenWire、REST(HTTP)、RSSおよびAtom、Stomp、WSIF、WS通知、XMPPのいずれかのプロトコルを使用できます。
2020年

回答を編集しました。問題のある部分は置き換えられました。
フリーク

1
@brainOverflow誰が私の回答を編集し、この不適切なポイントをnum 3.にしたのかわかりません。ポイント2であなたが言っていることを尋ねたので、投票または提案を行う前に常に注意深く読んでください
Freak

私は既にそのPDFからコンテンツを追加しているので、他のリンクにもアクセスできます
Freak

43

基本から始めましょう。

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

JMS(Java Messaging Service)は、MOMによって実装される一連の構造化APIを定義するJCP標準です。JMS APIを実装する(つまり、互換性がある)MOMの例は、ActiveMQです。HornetMQなどもあります。このようなミドルウェアはJMS APIを取得し、それに応じて交換パターンを実装します。

上記によれば、RabbitMQのインスタンスであるJMS APIとそのJavaクライアントAPIのスケルトンを取り上げると、RabbitMQを使用してJMS実装を開発することが可能です。その時点で行う必要があるのは、 JMS仕様に基づく(RabbitMQを介した)交換パターン。

重要なのは、JMSのようなAPIのセットは、テクノロジー(この場合はRabbitMQ)に関係なく実装できることです。


TLCは何の略ですか?
mvmn 2016

@mvmm TLCはTelecommunicationの略です。[1]をご覧ください。[1] allacronyms.com/TLC/Telecommunication
Paolo Maresca

15

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

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

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


2
  • ここでJMS APIはどこで機能しますか?JMS APIはRabbitMQに接続するためにAMQPクライアントライブラリを使用する必要がありますか?

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

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

JMS APIの構成によって異なります。ActiveMQの場合、AMQPになる可能性がありますが、デフォルトでは「openwire」です。



0

https://spring.io/understanding/AMQP

AMQP(Advanced Message Queuing Protocol)は、非同期メッセージング用に公開されているワイヤ仕様です。送信データのすべてのバイトが指定されます。この特性により、ライブラリを多くの言語で記述し、複数のオペレーティングシステムとCPUアーキテクチャで実行できるため、真に相互運用可能なクロスプラットフォームメッセージング標準が実現します。

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


-1

一部は次のように書かれているこのドキュメントを探しているのではないかと思います。

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


いいえ。それは私が見ていたものではありません。しかし、似ています。
Kevin Rave
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.