5 分以内に説明された RabbitMQ

公開: 2022-11-24

今日は、RabbitMQ のおかげで非常に簡単に管理できる、最も重い処理を非同期で実行することにより、ページの読み込み時間を短縮する方法を見ていきます。

アプリケーションまたは Web サイトの安定性と速度は、ユーザーにとって最も重要な要素の 1 つです。 時間がかかりすぎたために、最初のページを見る前にサイトを離れたことがない人はいますか?

RabbitMQとは

RabbitMQ-1

RabbitMQ は、プロデューサーとコンシューマーの間の効率的な通信の仲介者として機能する、オープンソースで分散型のスケーラブルなメッセージング ブローカーです。

RabbitMQ はアプリケーション レイヤー メッセージング プロトコル AMQP を実装します。これは、ブローカーからプロデューサーへ、およびコンシューマーからプロデューサーへのメッセージの受信確認を通じて、配信保証付きの非同期メッセージを通信することに重点を置いています。

RabbitHQ の仕組み

簡単に言えば、RabbitMQ は、消費アプリケーションがメッセージを取得して処理するまで、プロデューサーから送信されたメッセージを格納するキューを定義します。 これにより、システムがメッセージを介して相互に通信する独立したモジュールに分割される分散システムを設計および実装できます。

すべてのコミュニケーションと同様に、プロデューサー、メッセージ、レシーバーが必要です。 ケーキの真ん中には、メッセージが受信者を待っている場所である RabbitMQ があります。

メッセージの交換を表す交換の種類を知ることで、それがどのように機能するかをよりよく理解しましょう。

交換の種類

交換を通じて、RabbitMQ を介してメッセージを送信するときはいつでも、キューに直接送信しません。 他のシステムがそれを読み取れるように、メッセージを別のキューに転送する責任を負う交換機に送信します。

exchanges-topic-fanout-direct
画像著作権: CloudAQMP

交換のタイプは、Direct、Fanout、Topic、および Readers です。

直接交換

プロデューサが 3 人のコンシューマに購入確認メッセージを発行する必要があるとします。 つまり、システムは購入を行うために他の 3 つの異なるシステムと通信する必要があります。

RabbitMQ はメッセージを各キューに個別に送信するため、これらの他のシステムがメッセージを直接受信する勢いがあります。

通常、交換はメッセージをキューに転送しますが、メッセージをすべてのキューに送信したくないことがよくあります。 したがって、交換作業を行うために適用できるいくつかの条件があります。

したがって、メッセージを 1 つのコンシューマーにのみ送信できます。 すべての人に送信する代わりに。

バインディング キー: キューをエクスチェンジに接続するには、コネクタのようなキューとエクスチェンジ間の関係であるバインドを作成する必要があります。

ルーティング キー: このバインドでは、ルーティング キーと呼ばれる要素を作成することもできます。これは、メッセージを特定のキューに転送するためのキーです。

たとえば、ルーティング キー X、ルーティング キー Y、およびルーティング キー Z がある場合、ルーティング キー Y を持つメッセージはキュー Y を通過し、メッセージを受信するように定義したコンシューマに直接配信されます。

このようにして、複数のキューを交換に接続することができますが、同時に、ルーティング キーを使用して交換と異なる関係を持つこともできます。

ファンアウト交換

メッセージが交換に送信されると、それに接続されているすべてのキューに送信されます。 したがって、ファンアウト交換に 10 個のキューが接続されている場合、すべてのキューが送信されたメッセージを受信します。

話題交換

これは最も柔軟な交換の 1 つであり、件名に応じてメッセージを送信できます。 また、ルーティング キーの命名方法に基づいて、ルールのパターンとシステム間の関係を作成できます。

例: routing key (x.*); routing key(*.z); routing key (*.y.*). routing key (x.*); routing key(*.z); routing key (*.y.*).

RabbitMQ の AQMP とは

AMQP (Advanced Message Queuing Protocol) は、複数のアプリケーション間のメッセージの転送を定義するために使用されるオープン メッセージング プロトコルです。 非同期トランスポートが可能であることを除いて、ワイヤレベルのプロトコルであるという点で、HTTP および TCP プロトコルに似ています。

RabbitMQ が AMQP の実装を選択した理由はいくつかあります。 1つ目は、このプロトコルは API を定義する JMS とは異なり、ミドルウェアの標準として記述されていることです。

Red Hat、Cisco Systems、Microsoft などの大企業を含む国際コンソーシアムが、この AMQP 仕様を作成しました。 2 つ目は、このプロトコルの相互運用性です。これにより、AMQP を実装するすべてのアプリケーションが AMQP ブローカーと通信できるようになります。

AMQP は、RabbitMQ で使用される唯一のプロトコルではありません。 以下の画像は、RabbitMQ によって実装および/またはサポートされているすべてのプロトコル、言語、および API を表しています。

RabbitMQ の優れた機能

RabbitMQ は、メッセージを介して非同期的にさまざまな場所からさまざまなアプリケーションを統合できるようにするだけでなく、メッセージング ブローカーの世界で非常に人気のある他の機能を提供します。

信頼できるストレージ

RabbitMQ には、メッセージ配信を保証するいくつかの機能が組み込まれています。 これらの中で、コンシューマーがメッセージを受信できない場合にストレージを提供します。 これにより、コンシューマーはメッセージの配信を受け入れて、メッセージが正常に処理されたことを確認できます。

処理が失敗した場合、RabbitMQ は、メッセージを再キューイングして、コンシューマーの別のインスタンスによって消費されるか、回復時に最初に失敗した同じコンシューマーによって再度処理されることを許可します。

RabbitMQ は、メッセージの配信順序も保証します。 つまり、RabbitMQ キューに到着したのと同じ順序で消費されます。

クラスターの作成

RabbitMQ は毎秒数千のメッセージを処理することで優れたパフォーマンスを提供しますが、アプリケーションのパフォーマンスに影響を与えることなく、より多くのメッセージを処理できるようにする必要がある場合もあります。

このため、RabbitMQ ではクラスターを作成してソリューションを水平方向にスケーリングできます。これはプロデューサーとコンシューマーの両方に対して透過的です。

高可用性キュー

RabbitMQ では、クラスター内の複数のノード間でキューを複製できるため、ノードの障害やダウンタイムが発生した場合でも、ブローカーは引き続きプロデューサーからメッセージを受信し、適切なコンシューマーに配信できます。

柔軟なルーティング

RabbitMQ では、特定のパターンに従っても柔軟なルーティング ルールを定義して、バインディングを介して交換とキューの間でメッセージをルーティングできます。

複数のプロトコルのサポート

AMQP プロトコルのサポートに加えて、RabbitMQ はプラグインを介して STOMP、MQTT、および HTTP をサポートします。 また、各ブローカーのコンポーネントの認証およびアクセス制御メカニズムも組み込まれています。

RabbitMQ の実際の使用例

RabbitMQ の最も重要な使用例は、アプリケーション間の非同期性の保証を可能にし、アプリケーション間の結合を減らし、アラートを配布し、バックグラウンドでジョブのキューを制御することです。

ただし、RabbitMQ の実際の使用例は e コマースであり、販売注文を操作、処理し、流通や請求書の発行など、他の分野のシステムに転送するために使用されます。

注文を処理するときに、販売メッセージを配送センターと請求書エリアに転送できます。 このスキームでは、メッセージ送信の非同期パターンに従ってすべてが水平方向に機能しますが、多くの場合、アクションを複数のキューに送信できます。

前の例に続いて、この機能は、顧客が購入を行い、製品を配布、輸送、および請求のために準備する必要がある場合に非常に役立ちます。

これらの各セクターは異なるシステムであるため、RabbitMQ の目標は、これらすべてのメッセージを対応するシステムに転送することです。

Rabbit MQ の代替手段:

RabbitMQ は見た目よりもはるかにシンプルで、次のようないくつかの代替手段があります。

#1。 アイアンMQ

IronMQ は、超高速のメッセージ キューイング ソフトウェアです。 可用性が高く、設計の耐久性が高く、できれば 1 回限りの配信に適しています。 IronMQ は、最新のアプリケーション アーキテクチャ向けの最も強力なクラウドネイティブ ソリューションです。

ironmq-1

プッシュ キュー、プル キュー、およびポーリング リクエストをより長く開いたままにするロング ポーリングをサポートします。 さらに、複数の高可用性データセンターを使用できるため、スケーラビリティが容易になります。

クラウド、共有または専用ハードウェア、またはオンプレミスにデプロイできます。 また、読みやすいドキュメントを備えたさまざまなクライアント ライブラリもあります。

#2。 アパッチ・カフカ

Kafka は、分散イベント ストリーミングで強力な存在感を持つプラットフォームです。 基本的に、Kafka は複製され、分散され、永続的なコミット ログとして設計されています。

カフカ-1

その最大の使いやすさは、イベント駆動型のマイクロサービスまたは大規模なストリーム処理アプリケーションを強化し、クラスター内で非同期にイベントを自動的にレプリケートして、フォールト トレランスと高可用性を実現することです。

#3。 アパッチ アクティブMQ

Apache-ActiveMQ

ActiveMQ は、Java ベースのマルチプロトコル メッセージ ブローカーです。 これにより、アプリケーション層で AMQP メッセージ キューイング プロトコルを使用してアプリケーションを統合できます。

JMS (ネイティブ Java) や Stomp (PHP アプリケーションで使用可能) など、統合のためのいくつかのプロトコルを実装しています。

さらに、Amazon には Amazon MQ と呼ばれる「管理された」バージョンがあり、サービスをより簡単に使用できます。

最後の言葉

メッセージング ブローカーは、伝統的に、組織のアーキテクチャ内で重要な要素でした。 それでも、さまざまなチャネルを通じて企業のシステムに入るユーザーが増加するにつれて、低コストで水平方向に拡張できる製品が必要になります。 1 秒間に大量のメッセージを処理できるようにします。

これは、RabbitMQ などの新世代のブローカーが、クライアントに高レベルの可用性、信頼性、相互運用性、およびパフォーマンスを提供しようとする最新のアプリケーションでより関連性が高まっている場所です。

また、アプリケーション用の信頼できる RabbitMQ ホスティング プラットフォームを検討することもできます。