大多數任務的將被引導到 個體勞動者(例如,「送 ‘GET_STATUS’作業‘system51’」) - 這將是一個問題?
根本不是。只需爲每個工作人員創建一個隊列,例如說每個節點監聽稱爲default
循環賽隊列及其節點名稱後,每個節點都有自己的隊列名爲:
(a)$ celeryd -n a.example.com -Q default,a.example.com
(b)$ celeryd -n b.example.com -Q default,b.example.com
(c)$ celeryd -n c.example.com -Q default,c.example.com
直接路由任務的節點很簡單:
$ get_status.apply_async(args, kwargs, queue="a.example.com")
或使用Router
配置:
# Always route "app.get_status" to "a.example.com"
CELERY_ROUTES = {"app.get_status": {"queue": "a.example.com"}}
是否妥善處理不良 網絡狀況(例如, 連接死亡)?
工作人員從代理連接故障中恢復正常。 (從RabbitMQ的至少,我不知道其他所有的後端,但這 容易測試和修復(你只需要添加相關的例外列表)
對於客戶端,您可以隨時嘗試發送任務,如果連接中斷, 或者你可以設置HA與RabbitMQ的:http://www.rabbitmq.com/pacemaker.html
如果RabbitMQ的被用作 後端什麼功能僅適用(我寧願不運行野外系統上的RabbitMQ )
遠程控制命令,只支持「直接」交換(不是「主題」或「扇出」)。但是這將在Kombu (http://github.com/ask/kombu)中得到支持。
我會認真的重新考慮使用RabbitMQ。你爲什麼認爲這不合適? 恕我直言,我不會在別處尋找這樣的系統,(除非可能ZeroMQ,如果系統 是暫時的,你不需要消息持久性)。
是否有任何其他原因芹菜可以使我的生活 困難,如果我像我所描述的那樣使用它?
我想不出上面描述的任何東西。由於併發模型 是多處理,它確實需要一些內存(我正在努力增加對 線程池和eventlet池的支持,這在某些情況下可能有所幫助)。
這將是有效的建議,芹菜是矯枉過正,但也有其他 原因,這將讓我的生活更輕鬆,所以我想 考慮)
在這種情況下,我認爲你輕易使用矯枉過正的字眼。它確實取決於 多少代碼和測試你需要編寫沒有它。我認爲 最好是改進一個已經存在的通用解決方案,理論上它聽起來像是應該適合你的應用的 。
*你爲什麼認爲[RabbitMQ不適合]?*因爲我的Erlang + RabbitMQ foo很弱,而且在現場系統上需要構建+配置+維護,已經有了Python + SQLite。 – 2010-10-03 14:24:07
*但是,這將在Kombu支持(http://github.com/ask/kombu)*酷 - 我會檢查Kombu。 *在這種情況下,我認爲你可以輕易地使用過度殺傷性詞語...... *真實 - 我大部分都補充說,因爲我在StackOverflow上最大的寵兒之一就是「你做錯了,你應該這樣做」。太棒了,非常感謝您的幫助。 – 2010-10-03 14:38:29
我向你保證,RabbitMQ真的很容易設置和維護。這是我安裝並忘記的東西。 – asksol 2010-10-05 07:46:37