2009-08-21 71 views
5

我正在嘗試更換一個小本地消息系統,並且正在玩zmq。 我需要檢測慢速讀取器,並啓動/斷開它們 - 讀取速度非常慢,意味着特定消費者的隊列大小高於某個閾值。用zmq(zeromq)檢測慢速讀卡器

到目前爲止,似乎zmq阻止每個消費者,如果其中一個有點慢(公平) - 但我找不到任何方式來檢測潛在的緩慢消費者。任何人都有使用 的經驗,以及zmq如何實現這一點 - 或者讓其他無代理的消息系統重新推薦?

+0

那麼,爲什麼當達到HWM並放棄舊的消息時繼續接收最新的消息會更好?至少我可以想到許多我更喜歡這種行爲的情況。我當然可以自己推出這個效果,但它似乎是一個通用的選項。 – 2012-01-17 18:19:23

回答

3

從zeromq-2.0.7開始,您可以在ZMQ_PUB套接字上設置ZMQ_HWM選項,以控制可以爲訂戶排隊的最大消息數。一旦達到高水位標記,發往該用戶的所有其他消息將被丟棄,直到隊列大小下降到高水位標記以下。這限制了專用於您稱之爲慢速讀取器的內存量。

但是,由於ZeroMQ庫公開了套接字而非客戶端,因此無法識別並強制斷開不需要的客戶端,而無需修改庫本身。

0

ZeroMq指南中有關於此的一個部分,它建議實施一種模式,稱爲「Suicidal Snail Pattern」。

基本上,它顛倒了依賴關係,並試圖說服慢速用戶通過給他們一種方式來檢測他們是否已經成爲慢讀者,從而斷開/關閉自己。