1. ホーム
  2. java

[解決済み] JMSとAMQP - RabbitMQ

2022-05-10 03:44:19

質問

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

以下は私の仮定(と同様に質問)です。

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

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

どのように解決するのですか?

あなたの質問は少し混乱していますが、そのビットを1つずつ見てみましょう。

一般的な概念です。

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

現在 (以下 ウィキペディア ):

AMQP (アドバンスト・メッセージ・キューイング・プロトコル) は、メッセージ指向のミドルウェアのためのオープンスタンダードのアプリケーション層プロトコルです。その AMQPの特徴は、メッセージ指向、キューイング、ルーティング(ポイントツーポイント、パブリッシュアンドサブスクライブを含む)、信頼性、そして (ポイントツーポイント、パブリッシュアンドサブスクライブを含む)、信頼性、セキュリティです。 セキュリティです。

そして最も重要なこと(再びWikipediaより)。

<ブロッククオート

単にAPIを定義しているJMSとは異なり、AMQPはワイヤレベルのプロトコルです。 プロトコルです。ワイヤーレベルのプロトコルは、オクテットのストリームとしてネットワークに送信されるデータの形式を記述したものです。 オクテットのストリームとしてネットワークを介して送信されるデータのフォーマットの記述です。 したがって、このデータ形式に準拠したメッセージを作成し、解釈できるツールはすべて このデータフォーマットに準拠したメッセージを作成し、解釈できるツールは、実装言語に関係なく、他の準拠したツールと相互運用することができます。 実装言語に関係なく相互運用できます。

知っておくべきいくつかの重要なこと。

  1. AMQPはJMS APIを実装していないメッセージング技術であることに留意してください。
  2. JMSはAPIで、AMQPはプロトコルです。ですから、JMSのデフォルトプロトコルは何かというのは意味がありません。 を呼び出すとき、クライアントアプリケーションは接続プロトコルとしてHTTP/Sを使用します。 WebLogic ウェブサービスを呼び出すとき、クライアントアプリケーションは接続プロトコルとして HTTP/S を使用します。
  3. JMSは単なるAPI仕様です。それはいかなるプロトコルも使用しません。JMSプロバイダー(ActiveMQなど)は、JMS APIを実現するために任意の基礎的なプロトコルを使用することができます。 JMS APIを実現することができます。例:Apache ActiveMQは以下のプロトコルのいずれかを使用することができます。 以下のプロトコルのいずれかを使用できます。AMQP、MQTT、OpenWire、REST(HTTP)、RSS、Atom。 Stomp、WSIF、WS Notification、XMPP。以下を読むことをお勧めします。 使用方法 JMSトランスポートを接続プロトコルとして使用する .

グッドラック :)