基本的な考え方
1. ほとんどのアプリケーションでは、メッセージ サービス ミドルウェアを使用してシステムの非同期通信を改善し、デカップリング機能を拡張できます。
2. メッセージ サービスにおける 2 つの重要な概念:
メッセージ ブローカー (メッセージ ブローカー) と宛先 (宛先) メッセージ送信者がメッセージを送信すると、メッセージはメッセージ ブローカーによって引き継がれ、メッセージ ブローカーはメッセージが指定された宛先に確実に配信されるようにします。
3. メッセージキューには主に 2 つの形式の宛先があります。
1. キュー(queue):ポイントツーポイントのメッセージ通信(point-to-point)
2. トピック: パブリッシュ/サブスクライブメッセージ通信
4. ポイントツーポイント:
- メッセージ送信者がメッセージを送信し、メッセージ エージェントがメッセージをキューに入れ、メッセージ受信者がキューからメッセージの内容を取得し、メッセージは読み取り後にキューから削除されます。
- メッセージの送信者と受信者は 1 人だけですが、受信者が 1 人だけであるという意味ではありません
5. 公開および購読:
- 送信者 (パブリッシャー) がトピックにメッセージを送信し、複数の受信者 (サブスクライバー) がトピックをリッスン (サブスクライブ) し、メッセージの到着と同時にメッセージを受信します。
6. JMS (Java Message Service) JAVA メッセージ サービス:
- JVMメッセージブローカーに基づく仕様。ActiveMQ と HornetMQ は JMS 実装です
7. AMQP(アドバンストメッセージキュープロトコル)
- 高度なメッセージ キュー プロトコル。メッセージ ブローカーの仕様でもあり、JMS と互換性があります。
- RabbitMQ は AMQP の実装です
8. スプリングサポート
- spring-jms は JMS のサポートを提供します
- spring-rabbit は AMQP のサポートを提供します
- メッセージ ブローカーに接続するには、ConnectionFactory の実装が必要です
- メッセージを送信するための JmsTemplate、RabbitTemplate を提供する
- @JmsListener (JMS)、@RabbitListener (AMQP) アノテーションは、メソッド上のメッセージ ブローカーによってパブリッシュされたメッセージをリッスンします。
- @EnableJms、@EnableRabbit のサポートを有効にする
9. Spring Boot 自動構成
- JmsAutoConfiguration
- RabbitAutoConfiguration
10. 市販のMQ製品
- ActiveMQ、RabbitMQ、RocketMQ、Kafka
RabbitMQ の概要:
RabbitMQ は、erlang によって開発された AMQP (Advanved Message Queue Protocol) のオープンソース実装です。
核となるアイデア
メッセージ
メッセージ。メッセージは匿名であり、メッセージ ヘッダーとメッセージ本文で構成されます。メッセージ本文は不透明ですが、メッセージ ヘッダーは、routing-key (ルーティング キー)、priority (他のメッセージに対する優先度)、delivery-mode (メッセージが永続的なストレージを必要とする可能性があることを示す) などの一連のオプションの属性で構成されます。等
出版社
メッセージのプロデューサーは、メッセージを交換にパブリッシュするクライアント アプリケーションでもあります。
交換
プロデューサからメッセージを受信し、サーバー内のキューにルーティングする交換。
Exchange には、ダイレクト (デフォルト)、ファンアウト、トピック、ヘッダーの 4 つのタイプがあり、Exchange のタイプが異なると、メッセージを転送するための戦略も異なります。
列
メッセージ キュー。コンシューマに送信されるまでメッセージを保存するために使用されます。これはメッセージのコンテナーであり、メッセージの宛先です。メッセージは 1 つ以上のキューに入れることができます。メッセージは常にキュー内にあり、コンシューマーがキューに接続してメッセージを取り出すのを待っています。
バインディング
バインディングは、メッセージ キューと交換間の関連付けに使用されます。バインディングは、ルーティング キーに基づいて交換機とメッセージ キューを接続するルーティング ルールであるため、交換機はバインディングで構成されるルーティング テーブルとして理解できます。
Exchange と Queue のバインディングは、多対多の関係になる場合があります。
繋がり
TCP 接続などのネットワーク接続。
チャンネル(長時間接続)
チャネル: 多重接続における独立した双方向データ ストリーム チャネル。チャネルは、実際の TCP 接続で確立された仮想接続です。AMQP コマンドはチャネルを通じて送信されます。メッセージのパブリッシュ、キューへのサブスクライブ、メッセージの受信など、これらのアクションはすべてチャネルを通じて完了します。オペレーティング システムが TCP を確立および破棄すると非常にコストがかかるため、TCP 接続を再利用するためにチャネルの概念が導入されました。
消費者
メッセージのコンシューマは、メッセージ キューからメッセージを取得するクライアント アプリケーション プログラムを表します。
仮想ホスト
仮想ホスト。交換、メッセージ キュー、および関連オブジェクトのコレクションを表します。仮想ホストは、同じ認証および暗号化環境を共有するサーバーの別個のドメインです。各 vhost は基本的に、独自のキュー、スイッチ、バインディング、および許可メカニズムを備えた RabbitMQ サーバーのミニバージョンです。vhost は AMQP の概念の基礎であり、接続時に指定する必要があります。RabbitMQ のデフォルトの vhost は / です。
ブローカ
メッセージキューサーバーエンティティを表します