我正在制定一個過程(比如生產者)需要發送單向消息給可變數量的過程(比如消費者)的需求。事件驅動的發佈訂閱模型
發佈 - 訂閱模式似乎很好,因爲消費者將訂閱來自制作者的消息。我嘗試使用ZeroMQ來實現這一點。
但是,我有幾個問題是:
消費者不得不爲信息連續輪詢。當有新消息時,我會通知消費者。
生產者隊列有可能被填滿。我希望生產者能夠根據某些條件從隊列中刪除消息(例如,刪除超過5秒的消息,或刪除已被讀取5次的消息)。
由於消費者正在輪詢並且消息未從隊列中刪除,因此消費者會看到重複的消息,直到有新消息出現爲止。我希望每消息消息只收到一次消息。
我知道我可能會使用錯誤的模型(發佈 - 訂閱可能不適合)。我曾考慮過使用請求回覆,但這並不奏效,因爲製片人不想跟蹤消費者的數量。
任何人都可以提出一個很好的選擇嗎?
我唯一的建議就是包裹的pub/sub輪詢在一個特殊的偵聽器線程提供通知應用程序的主環(或其他)也忽略重複郵件並儘快卸載收件箱。 – 2012-03-26 17:37:39
我建議您查看OMG的DDS中間件標準。已經有一個很好的開源實現,它被稱爲OpenDDS(請參閱http://www.opendds.org)。它具有豐富的服務質量設置,可讓您控制其行爲。即將到來的3.1版本的OpenDDS將非常好。 – 2012-03-27 12:04:51
我對你關於ZMQ pub/sub的3個問題感到困惑。這一切聽起來像你沒有真正調查過ZMQ做什麼? 1)總是進行某種形式的投票,無論你的客戶是否明確地進行投票,或者你將其附加到某個處理程序,並且庫在底層進行2)ZMQ有一個「高水位」,它將啓動如果消息沒有從緩衝區中排出,則在特定點之後丟棄消息3)消息僅向每個訂戶傳遞一次。我錯過了什麼嗎? – jdi 2012-03-28 01:24:32