Pub/Sub — 1回の発行が全員に届く
お知らせを伝えたい相手が増えてくると、「誰に送るかを送り手が全部把握する」やり方は限界がきます。引っ越しのたびに全員へ住所変更を伝えるようなもので、相手が増えるほど送り手がパンクします。そこで送り手と受け手の間に仲介役(ブローカー)を置き、「トピック」を旗印にやりとりするのがPub/Sub(出版・購読)です。
送り手(Publisher)は宛先を知りません。ただ「スポーツ」というトピックに向けて1回放り込むだけ。すると、そのトピックを購読(Subscribe)している人全員に同時に配られます。下の図1で「配信」を押し、1回の発行が何人にも一斉に届くファンアウトを見てください。購読チップをON/OFFすると、届く相手が変わります。
送り手と受け手が、互いを知らなくていい
Pub/Subの肝は疎結合(そけつごう)です。発行者は「誰が聞いているか」を一切知りません。購読者も「誰が言ったか」を気にしません。両者をつなぐのはトピックという名前だけ。だから購読者を後から増やしても、発行側のコードは1行も変わりません。新しい受け手は黙ってそのトピックを購読すればいいのです。
これはメッセージキュー(1対1)との大きな違いです。キューは「1つのメッセージを、待っている誰か1人が取り出して処理する」仕事の分配。対してPub/Subは「1つの発行を、購読者全員に複製して配る」一斉通知。前者は仕事をさばくため、後者は出来事を知らせるための仕組み、と覚えると混同しません。
トピックを増やせば、配信先を細かく仕分けできます(これをトピックフィルタリングと呼びます)。図1で購読チップをすべてOFFにしてから配信すると、発行は成功しているのに誰にも届かないのが分かります。発行者にはエラーすら起きません —— 聞いている人がいなければ、ただ静かに消えるだけです。
- Publisher
- トピックに向けてメッセージを発行する側。受け手が誰かを知らない。
- Subscriber
- 関心のあるトピックを購読する側。そのトピックの発行を受け取る。
- Broker / Topic
- 発行を受けて、購読者全員に配る仲介役。トピックという名前で配信先を仕分ける。
- ファンアウト
- 1つの発行が複数の購読者へ枝分かれして同時に届くこと。Pub/Subの核。
まとめ
Pub/Subは、発行者と購読者の間にトピックという名前の旗を立て、1回の発行を購読者全員へ一斉に配る仕組みです。送り手と受け手がお互いを知らないからこそ、受け手を自由に足し引きでき、システムは大きくしなやかになります。「誰に送るか」を送り手から切り離す —— それがPub/Subの効きどころです。