2012-05-20 53 views
14

首先,我是ZeroMQ和消息隊列系統的新手,所以我試圖做的事情可以通過不同的方法來解決。我正在設計一個消息系統,它執行以下操作:如何監控/管理ZeroMQ中的隊列?

  • 多個客戶端連接到代理併發送需要處理的項目的ID。客戶端立即斷開連接,不等待響應。

  • 代理將項目發送給工人,每個工人一個項目,以執行一些處理。每個返回都會返回處理已完成的信號。

我有一個基本的系統設置,其爲處理請求/應答正確,但我也希望能夠做到以下幾點:

  • 查詢經紀人,看看有多少進程實際上是在工人身上運行,有多少人正在等待運行。

  • 讓代理確保每個ID只有一個進程正在運行 - 如果重複的ID到達並且該項目當前未被工作人員處理,請不要將其添加到隊列中。

我正在使用經紀人/經銷商套接字輪詢設置。我使用的代碼與this example from Ian Barber非常相似。

我的第一個傾向(儘管我不確定如何在zmq中實現它)是讓經紀人跟蹤已收到的ID以及正在由工作人員積極處理的ID。看起來,經紀人立即將請求轉發給工作人員,無論他們是否可以實際運行處理。工人然後排隊ID並按順序處理它們。這並不理想,因爲我希望能夠集中監視和控制系統中正在發生的事情以實現可靠性。

總之,任何提示,提示或這種類型的設置的例子將不勝感激。

+0

只是一個念頭,ZMQ是相當準系統/重量輕,也許你應該看看產品,如的ActiveMQ,RabbitMQ的或openmq,他們有廣泛的管理可能性。像activemq和openmq這樣的產品都是以Java爲中心的,但是它們對很多編程語言都有很強的綁定功能。 – fvu

+0

@fvu - 謝謝 - 我本來希望讓zmq去,但會檢查一些其他庫 - 特別是我認爲RabbitMQ可能工作。 – jonstjohn

回答

14

在我看來,ZeroMQ最適合用於設計圖書館的無代理設計。如果你想監控隊列中的物品數量,或者吞吐量等等,你將不得不自己將其構建到應用程序/設備/製作器中。由於你是新來的消息傳遞,這可能會很快失去控制。鑑於此,我建議尋找RabbitMQ(或類似的經紀商),它會爲您提供這些開箱即用的服務。如果您採用RabbitMQ(或更確切地說,AMQP),我建議您使用扇形交換來處理上述情況。

+0

+1你對zeromq正確,但我會用rabbitmq作爲隊列服務器和zeromq消息代理使用zeromq。 – BlaShadow