web-dev-qa-db-ja.com

JMSおよびAMQP-RabbitMQ

JMSとAMQPの用語との関係を理解し​​ようとしています。 JMSはAPIであり、AMQPはプロトコルであることは知っています。

ここに私の仮定があります(そして質問も)

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

上記のいくつかは愚かかもしれません。 :-)しかし、それを頭で包もうとしています。

116
Kevin Rave

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

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

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

Now(from Wikipedia ):

Advanced Message Queuing Protocol(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のいずれかのプロトコルを使用できます。 接続プロトコルとしてJMSトランスポートを使用 を読むことをお勧めします。

幸運を :)

99
Freak

基礎から始めましょう。

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

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

上記によると、JMS APIのスケルトン、RabbitMQのインスタンス、およびそのJavaクライアントAPIを使用すると、RabbitMQを使用してJMS実装を開発することができます。その点は、JMS仕様に従って(RabbitMQを介して)交換パターンを実装することです。

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

38
Paolo Maresca

定義された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

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

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

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

そのJMS APIの構成に依存します。 ActiveMQの場合、 AMQP になりますが、デフォルトでは 'openwire'です

2
Axel Podehl

https://spring.io/understanding/AMQP

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

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

0
gstackoverflow