RabbitMQは、Erlang言語で開発された分散メッセージミドルウェアであり、オープンソースです。Advanced Message Queuing Protocol (AMQP) をサポートし、Java、Golang、PHP、Pythonなどさまざまなプログラミング言語のクライアントライブラリをサポートしています。

特徴

  • 信頼性: メッセージの永続性、トランザクションのサポート、コンシューマと送信の確認などを通じて信頼性を確保します。
  • ルーティングメカニズム: ブロードキャスト、サブスクリプション、ヘッダーマッチングなどの主要な購読および消費モデルをサポートしています。
  • スケーラビリティ: 複数のRabbitMQノードがクラスタを形成し、実際のビジネスのニーズに応じてクラスタを動的に拡張することができます。
  • 高可用性: キューはクラスタ内のマシンにミラーとして設定することができ、一部のノードに問題が発生した場合でもキューは利用可能です。
  • 複数のプロトコル: ネイティブのAMQPサポートに加え、RabbitMQはSTOMP、MQTTなどの複数のメッセージミドルウェアプロトコルもサポートしています。
  • 言語クライアント: RabbitMQはJava、Python、Ruby、PHP、C#、JavaScriptなどほぼすべての一般的に使用される言語をサポートしています。
  • 管理インターフェース: RabbitMQはメッセージやクラスタノードを監視および管理するための使いやすいインターフェースを提供しています。
  • プラグインメカニズム: RabbitMQは多くのプラグインを提供しており、ユーザーは独自のプラグインを記述することもできます。

主な使用事例

非同期処理

ビジネスプロセスの非コア部分や重要でない部分は、メッセージ通知を使用して対象システムに非同期に通知されるため、他のシステムからの処理結果を同期的に待つことなく、主要なビジネスプロセスが迅速に応答できます。

アプリケーションの分離

メッセージの購読メカニズムに基づいてビジネスの拡張が実現できます。例えば、eコマースの注文シナリオでは、ユーザーが注文をすると注文メッセージが生成されます。倉庫モジュールは出荷のために注文メッセージを購読し、ポイントモジュールはポイントを追加するために購読し、SMSモジュールはテキストメッセージを送信するために購読し、などがあります。

ピークシェービング

上流と下流のシステムの処理能力に違いがある場合、メッセージキューは下流のシステムが一定のペースでトラフィックを処理できるように規制する役割を果たします。

例えば、注文の支払いに成功して倉庫に出荷を通知する場合、現在の注文モジュールが高い並行性の1000をサポートし、倉庫出荷が100しかサポートしていない場合、メッセージキューを導入することで倉庫モジュールが注文メッセージを購読し、キューでゆっくりと出荷処理を行うことができます。

ps: 地下鉄への並びはそれと似ています。