メッセージブローカーとは? メッセージをルーティングするハブ
メッセージブローカーは、プロデューサーからメッセージを受け取り、設定したルールに基づいて適切なコンシューマーへルーティングするミドルウェアです。
キューが単一のバッファであるのに対し、メッセージブローカーは多数のキューやトピックを管理し、各メッセージの行き先を決め、配信・永続化・リトライを扱うシステムです。RabbitMQ、Kafka、そしてSQSやPub/Subのようなクラウドサービスがいずれもこの役割を担います。ブローカーはイベント駆動や非同期システムのバックボーンです。
ブローカーがすること
ブローカーはメッセージを受け取り、どのキューやサブスクライバーが受信するかを決めるルーティングルールを適用し、設定に従って永続化し、配信と確認応答を追跡します。プロデューサーとコンシューマーの両方が接続する、メッセージング基盤の中心的な部品です。
キュー対ブローカー
キューは一つのバッファであり、ブローカーはキューやトピックをホストし、ルーティングを強制し、配信のセマンティクスを管理するサーバーです。キューは利用するもの、ブローカーは運用するものです。
一般的なルーティングモデル
- ポイントツーポイント: 一つのメッセージを正確に一つのコンシューマーへ。
- publish-subscribe: 一つのメッセージを多数のサブスクライバーへファンアウト。
- トピックまたはrouting key: メッセージを関心のあるコンシューマーにマッチ。
- dead-letterルーティング: 配信できないメッセージを脇に置く。
パイプラインの中のブローカー
現実的なテストにはブローカーの起動が必要です。CIでは一般に、ブローカーをservice containerとして起動し、発行と消費の経路を実行し、実行ごとに片付けます。これにより、モックでは得られないルーティングと配信の振る舞いに対する確信が得られます。
運用上の重み
ブローカーは重要な基盤です。停止すれば非同期の流れが止まります。そのため、ブローカー周りのデプロイ安全性、health check、モニタリングへの要求水準が上がり、その設定はコードとして管理しCIでテストするものになります。
ブローカーのテストを高速に保つ
テスト実行ごとにブローカーを起動するのはタダではありません。ウォームなマネージドrunner (Latchkeyなど) はその起動コストを小さく保ち、ブローカーを使う統合スイートを素早いままにします。
重要なポイント
- メッセージブローカーは、メッセージをルーティング・永続化・配信するサーバーです。
- キューは単一のバッファですが、ブローカーはルーティングルールを持つ多数のキューやトピックを管理します。
- 現実的なブローカーのテストにはブローカーの起動が必要で、CIの起動時間を増やします。