2012-03-12 20 views
4

好..在heroku上我有24名工人(據我所知) 我有1000客戶說。每個在postgresql數據庫中都有自己的「模式」。Resque ..我怎麼能得到隊列列表

每個客戶端都有可以「稍後」完成的任務..將訂單發送給我公司的後端,就是一個很好的例子。

我在想我可以爲每個客戶端創建一個新的隊列,每個隊列都有它自己的工作者(進程)。這似乎不在卡片中。

這樣就OK了..我的想法現在是在客戶端記錄隊列場.. 所以客戶端1到15都在queue_a 和客戶端16到106是queue_b .. ECT如果一個客戶端使用堆,我們可以將它們移動到新的隊列中,或者將其他人移出慢速隊列。可以收集低列的客戶。這將是一個平衡的行爲,但如果我們持續跟蹤指標(無論如何,我們將繼續追蹤),這並不是一件難事的事情。

聽起來真棒,我真的在吐球階段)

現在,雖然。我想弄清楚如何爲每個隊列創建一個worker。 https://gist.github.com/486161告訴我如何創建X工作人員,但並不真正讓我將工作人員設置爲隊列。如果我知道這一點,以及如何獲得隊列列表,我想我會在尋求一個可行的解決方案。


閱讀
http://blog.winfieldpeterson.com/2012/02/17/resque-queue-priority/
我意識到,我的計劃是充滿了艱辛。第一客戶端/隊列得到添加到工人,會得到優先..我不想這樣,我希望他們都有相同的。只要他們是同一隊列的一部分。這

回答

10

我只是堅持的話題:)

獲得在resque所有隊列是很容易

Resque.queues 

的所有隊列名稱的列表,但不包括「失敗」隊列,我做了這樣的事情

(['failed'] + Resque.queues).each do |queue| 
    queue_size = queue=='failed' ? Resque::Failure.count : Resque.size(queue) 
end 
+0

感謝堆的人..我不知道這是最好的辦法,但它讓我對每個闕工人..我可能會把我的想法擴展到哈每個工人有不止一個隊列,但這只是優先考慮的。 – baash05 2012-03-12 22:44:20

+0

你知道隊列是否被alpha排序嗎? – baash05 2012-03-12 22:45:37

+0

[對'Redis.queues'的調用](https://github.com/resque/resque/blob/8a8fd83f1f32755734f0068d9f211aeb2fda1f9e/lib/resque.rb#L253)使用[SMEMBERS](http://redis.io/命令/ SMEMBERS)在Redis上的操作。由於Redis是爲速度而設計的鍵值緩存/存儲,因此SMEMBERS不會嘗試對集合成員進行排序。所以對@ baash05的問題的答案是 - 不。 – sameers 2015-02-22 23:46:12