ZeroMQ的模式-Publish-Subscribe
Publish-subscribe Pattern:釋出訂閱模式。
現實中,並不是所有請求都期待答覆,而不期待答覆,自然就沒有了狀態。所以相對於REQ-REP,PUB-SUB模式容易理解也簡單得多。廣播聽過吧?收音機用過吧?就這個意思。
相應地,該模式下的socket也就兩種:ZMQ_PUB & ZMQ_SUB。 分別對應電臺和收音機。
ZMQ_PUB
ZMQ_PUB主要用來讓訊息釋出者用來散發訊息的。所有連線上的peer都能收到由它散發的訊息。 zmq_recv(3) 這個API是不能用在這個socket上的,原因顯而易見。而zmq_send作用在該socket上時是永遠不會阻塞的,如果訂閱者異常,發出的訊息則會被丟棄。
Summary of ZMQ_PUB characteristics | |
---|---|
Compatible peer sockets | ZMQ_SUB |
Direction | Unidirectional |
Send/receive pattern | Send only |
Incoming routing strategy | N/A |
Outgoing routing strategy | Fan out |
ZMQ_HWM option action | Drop |
ZMQ_SUB
很明顯,訂閱者通過這個socket來接受釋出者釋出的訊息。需要注意的是,在使用該socket時,必須顯式地呼叫zmq_setsockopt ,設定ZMQ_SUBSCRIBE和filter。如果不設定的話,是收不到任何訊息的。
Summary of ZMQ_SUB characteristics | |
---|---|
Compatible peer sockets | ZMQ_PUB |
Direction | Unidirectional |
Send/receive pattern | Receive only |
Incoming routing strategy | Fair-queued |
Outgoing routing strategy | N/A |
ZMQ_HWM option action | Drop |
總結
PUB-SUB模式一般處理的都不是系統的關鍵資料。釋出者不關注訂閱者是否收到釋出的訊息,訂閱者也不知道自己是否收到了釋出者發出的所有訊息。你也不知道訂閱者何時開始收到訊息。因此邏輯上,它都不是可靠的。
事實上,即便你先啟動訂閱者,再啟動釋出者。訂閱者也不一定能收到所有的訊息。原因在於:釋出者已啟動就開始撒佈訊息,而這時訂閱者可能還沒有完成連線。如果一定需要保證,則需要做兩者的同步。最傻的方法就是讓釋出者啟動之後sleep一會兒再開始發訊息,不過這種方式就跟聽起來一樣不靠譜。
一個訂閱者可以訂閱多個釋出者。同時訂閱者通過filter來過濾自己需要的訊息,需要注意的時,filter是在訂閱端起作用的。也就是說所有訊息是會到達所有訂閱者處,訂閱者根據filter丟掉自己不需要的訊息。
相關文章
- 架構設計之源:設計模式的場景分析(1)Publish-Subscribe架構設計模式
- 5.31.ZeroMQMQ
- ZeroMQ分享-part1MQ
- ZeroMQ 教程 002 : 高階技巧MQ
- ZeroMQ 教程 001 : 基本概覽MQ
- zmq通訊協議的實現,又稱zeromqMQ協議
- Centos zeromq 訊息佇列 安裝CentOSMQ佇列
- ZeroMQ–使用jzmq進行程式設計MQ行程程式設計
- 輕量訊息中介軟體ZeroMQMQ
- ZeroMQ 3.2.2 XP下無法執行MQ
- <摘錄>開源軟體架構-ZeroMQ架構MQ
- RabbitMq、ActiveMq、ZeroMq、kafka之間的比較,資料彙總MQKafka
- Mac OS 10.9 [Mavericks] 編譯支援 ZeroMQ 4.0.1 版本的 gozmqMac編譯MQGo
- 第一部分 學習使用ZeroMQMQ
- 訊息中介軟體部署及比較:rabbitMQ、activeMQ、zeroMQ、rocketMQ、Kafka、redisMQKafkaRedis
- 為什麼我希望用C而不是C++來實現ZeroMQC++MQ
- Java訊息佇列總結只需一篇解決ActiveMQ、RabbitMQ、ZeroMQ、KafkaJava佇列MQKafka
- 為什麼我希望用C而不是C++來實現ZeroMQ(第二篇)C++MQ
- 設計模式——代理模式的思考設計模式
- Apache的prefork模式和worker模式Apache模式
- 組合模式(Composite)的安全模式與透明模式模式
- 【設計模式】最常用的設計模式之一的觀察者模式設計模式
- 【設計模式】漢堡中的設計模式——策略模式設計模式
- 用到的設計模式總結--單例模式+工廠方法模式+Builder模式設計模式單例UI
- 設計模式中的觀察者模式設計模式
- MVC模式和MVP模式的區別MVC模式MVP
- 我的Java設計模式-代理模式Java設計模式
- 我的Java設計模式-策略模式Java設計模式
- Proxy模式與Decorator模式的區別模式
- 【設計模式】漢堡中的設計模式——觀察者模式設計模式
- 詳解Oracle的連線模式:專有模式和共享模式Oracle模式
- 策略模式、策略模式與Spring的碰撞模式Spring
- zabbix的主動模式和被動模式模式
- 設計模式(三)Animation中的策略模式設計模式
- Java 設計模式之外觀模式的作用Java設計模式
- 應用最廣的模式——單例模式模式單例
- 《Head First 設計模式》:剩下的模式設計模式
- 我的Java設計模式-中介者模式Java設計模式