分散式系統除點對點通信,常需一對多廣播。本示例實現一個 Hub 服務:Publisher 發布消息到 Topic,Subscriber 訂閱 Topic 接收消息。類似分散式 Observer Pattern,實現解耦。基於 TCP,可靠性優於 UDP(但非 100% 可靠)。
為便於 telnet 測試,採用換行分隔的文本協議,三條指令:
sub <topic> # 訂閱,立即收到該 Topic 最新消息
unsub <topic> # 退訂
pub <topic> <content> # 發布,所有訂閱者收到 "pub <topic> <content>"
# 終端 1: 啟動 Hub
$ hub 9999
# 終端 2: 訂閱 mytopic
$ sub 127.0.0.1:9999 mytopic
# 終端 3: 訂閱 mytopic 和 court
$ sub 127.0.0.1:9999 mytopic court
# 終端 4: 發布消息
$ pub 127.0.0.1:9999 mytopic "Hello world."
# 終端 2、3 均顯示: mytopic: Hello world.
$ pub 127.0.0.1:9999 court "13:11"
# 終端 3 顯示: court: 13:11
# 終端 2 無輸出
將原本端對端的 RPC(如 A→B SOAP)改為 Pub/Sub:A 發布到 topic_a_to_b,B 回應到 topic_b_to_a。掛載監控訂閱者即可無側邊查看通信內容,極大簡化 Trouble Shooting。
Hub 是 Single Point of Failure。解決方案:多 Hub 叢集 + 一致性哈希路由、或引入 Raft/Paxos 實現高可用(超出本示例範圍)。