2012-03-12 71 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