2012-12-18 61 views
0

我正在使用消息隊列處理分佈式生產者/消費者系統。我對平行化感興趣的部分是它的消費者方面,我對此感到滿意。容錯/高可用性生產者

但是,我不知道該怎麼做生產者。由於我的系統的生產部分的負載不是很高,我只需要一個生產者一次運行,但我想要一個可靠的管理方法,如啓動,停止,重新啓動和主要監視它,以便如果生產者主機失敗,另一個人可以拿起。

如果有幫助,我很滿意我的消費者算法,這是一種排隊工作的算法,因爲它可以容忍一段時間的故障,並能夠在發生故障的時間內找到發生的事情。

我確定有工具或至少已知的模式來做到這一點,而不是重新發明輪子。

我使用rabbitmq,但可以使用activemq,甚至可以重構成風暴或類似的東西,如果需要的話,我的代碼目前並不複雜。

+0

有些答案是我提出的很好的答案,從他們中的很多人那裏學到了,但不幸的是他們中沒有一個人是「答案」,所以我可以自信地將其標記爲對其他用戶有效,作爲解決我所暴露的問題的解決方案。 (我沒有理由不接受答案,是免費的:)) – palako

+0

另外,你可能想重申這個問題更適合的東西 - 可能是與監控有關的事情,因爲它與你的排隊技術沒有直接關係 – kzhen

+0

我接受幾個答案,謝謝你的提示。任何關於標籤的建議?我對此非技術不可知論者,只是選擇了這兩種方式來吸引那些希望有過往經驗的人,而不僅僅是理論。 – palako

回答

0

經過幾個星期的考慮,我想到了最簡單的解決方案,實際上我對它很滿意,所以我會分享它,以防發現它有用,或者指出如果您想到任何缺點,似乎目前工作正常。

我在我的數據庫中創建了一個最簡單的表,名爲heartbeat,它帶有一個名爲ts的單個時間戳字段,並且意味着所有時間都有一行。

我每隔5分鐘(石英)開始我所有的潛在製作者,如果ts字段比現在更舊(5分鐘),他們會更新表格。由於更新調用被阻止,因此我不會有db線程問題。現在,如果更新返回> 0,這意味着它實際上修改了ts的值,然後執行實際生成代碼(隊列作業)。如果更新返回0,那麼它不會修改表格,因爲其他人在5分鐘前不到,因此此生產者在5分鐘內再次檢查之前不會執行任何操作。

很明顯,5分鐘的值是可配置的,並且這允許通過很小的改變進行非常整潔的升級,以便能夠同時執行多個生產者,如果我有這種需求的話。