コンテンツにスキップ

パブリッシュ/サブスクライブパターン@通信方式

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. パブリッシュ/サブスクライブパターン

パブリッシュ/サブスクライブパターンとは

送信元から複数の宛先に非同期的に単方向で通信する。

送信元と宛先で通信処理が独立して実行されるため、メッセージ中継システムを経由した非同期通信を実行することになる。

送信元はメッセージ中継システムにメッセージをパブリッシュする。

プル型のサブスクライブの場合、サブスクライバーはメッセージ中継システムにポーリング受信を実行し、メッセージの取得を待機する。

プッシュ型のサブスクライブの場合、メッセージ中継システムはメッセージをサブスクライバーに送信する。


プル型

▼ プル型とは

メッセージの宛先は、メッセージ中継システムにポーリング受信を実行し、メッセージを受信する。

宛先で障害が起こっていても、障害の回復後にメッセージを処理すればよいため、耐障害性が高い。

▼ 例

RabbitMQのプル型では、RabbitMQにポーリング (HTTP、AMQPなど) を実行し、メッセージの取得を待機する(購読予約は無い)。

Apache Kafkaのプル型では、サブスクライブによる購読予約をKafkaに実行し、その上でポーリング受信をKafkaに実行する必要がある。

  • RabbitMQ (プル型だけでなく、プッシュ型も選べる)
  • Apache Kafka
メッセージブローカー プル型のSubscribe サブスクライブのポーリング受信
Apache Kafka 必要 必要
RabbitMQ 不要 必要


プッシュ型

▼ プッシュ型とは

メッセージ中継システムはサブスクライバーにメッセージを送信する。

宛先で障害が起こっていると、メッセージが損失する可能性があるため、耐障害性が低い。

これに対処するために、メッセージ中継システムで、リトライやデッドレターキューが必要になる。

▼ 例

  • RabbitMQ (プッシュ型だけでなく、プル型も選べる)
  • AWS SNS
  • AWS EventBridge
メッセージブローカー プッシュ型のSubscribe サブスクライブへの送信
Apache Kafka 非対応 非対応
RabbitMQ 必要 自動
AWS EventBridge 必要 自動


02. プロデュース/コンシュームパターン

プロデュース/コンシュームパターンとは

送信元から単一の宛先に非同期的に単方向で通信する。


プル型

双方向通信 (クライアント → サーバー → クライアント) である。

  • AWS SQS


プッシュ型

単方向通信 (サーバー → クライアント) である。


03. メッセージ中継システム

メッセージブローカー

  • Apache Kafka
  • AWS SNS
  • Google Cloud Pub/Sub
  • RabbitMQ


メッセージキュー

  • AWS SQS
  • EMQX


イベントバス

  • AWS EventBridge
  • CloudEvents


04. メッセージに使用するプロトコル

プロトコル 通信方式 対応するメッセージ中継システム例 一般的
AMQP バイナリ RabbitMQ、Apache Qpid
MQTT バイナリ EMQX
Kafka Protocol (Kafka独自プロトコル) バイナリ Apache Kafka
STOMP テキスト RabbitMQ
HTTP/1.1、Webhook テキスト (例:JSON、XMLなど) AWS SQS、AWS SNS、Google Cloud Pub/Sub
HTTP/2 (例:gRPC、GraphQLなど) バイナリ (例:Protocolbuf) 調査中...
WebSocket テキスト、バイナリ 調査中...