JMSとAMQPの用語との関係を理解しようとしています。 JMSはAPIであり、AMQPはプロトコルであることは知っています。
ここに私の仮定があります(そして質問も)
上記のいくつかは愚かかもしれません。 :-)しかし、それを頭で包もうとしています。
あなたの質問は少し厄介で、質問紙の難しい質問に似ています:)(教師は常に簡単な質問をして複雑になります: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はワイヤーレベルのプロトコルです。ワイヤーレベルのプロトコルは、オクテットのストリームとしてネットワークを介して送信されるデータの形式の説明です。したがって、このデータ形式に準拠したメッセージを作成および解釈できるツールは、実装言語に関係なく、他の準拠ツールと相互運用できます。
知っておくべき重要なこと:
幸運を :)
基礎から始めましょう。
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)。
定義された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
JMSはAPIであるため、一部のJMS APIはAMQPプロトコル( Apache QPID JMS など)で実装されますが、ほとんどのJMS APIは他のプロトコルを使用します。 AMQPプロトコルのバージョンが同じ場合、そのようなクライアントは別のAMQPクライアントと通信できるはずです。
そのJMS APIの構成に依存します。 ActiveMQの場合、 AMQP になりますが、デフォルトでは 'openwire'です
https://spring.io/understanding/AMQP
AMQP(Advanced Message Queuing Protocol)は、非同期メッセージング用に公開されているワイヤ仕様です。送信データのすべてのバイトが指定されます。この特性により、ライブラリを多くの言語で記述し、複数のオペレーティングシステムとCPUアーキテクチャで実行できるため、真の相互運用性を備えたクロスプラットフォームメッセージング標準が実現します。
AMQPは、Javaコミュニティで最も一般的なメッセージングシステムであるJMS(Java Message Service)とよく比較されます。 JMSの制限は、APIが指定されていることですが、メッセージ形式は指定されていません。 AMQPとは異なり、JMSにはメッセージの形成および送信方法に関する要件はありません。基本的に、すべてのJMSブローカーはメッセージを異なる形式で実装できます。同じAPIを使用するだけです。