Resque…如何获取队列列表?

4

好的.. 在heroku上,我有24个工作进程(据我所知)。 我有1000个客户,每个客户在postgresql数据库中都有自己的“模式”。

每个客户都有可以“延迟”完成的任务.. 将订单发送到我们公司的后端就是一个很好的例子。

我曾经想过为每个客户创建一个新的队列,并且每个队列都有自己的工作进程。但似乎这不可行。

所以好吧.. 我现在的想法是在客户记录中添加一个队列字段.. 例如,客户1到15在队列_a中, 客户16到106在队列_b中..等等。如果一个客户使用了大量资源,我们可以将他们移动到新的队列中,或将其他人移出慢队列。低容量的客户可以被收集起来.. 这将是一个平衡的过程,但如果我们跟踪指标(我们无论如何都会这样做),管理起来并不难。

(任何反对意见都非常欢迎,我现在还处于构思阶段)

但现在,我想弄清楚如何为每个队列创建一个工作进程。 https://gist.github.com/486161 告诉我如何创建X个工作进程,但并没有让我将一个工作进程设置为一个队列。如果我知道了这一点,以及如何获取队列列表,我认为我就可以朝着解决限制的可行方案迈进了。


继续阅读
http://blog.winfieldpeterson.com/2012/02/17/resque-queue-priority/
我意识到我的计划充满了困难.. 第一个添加到工作进程的客户/队列会得到优先处理.. 我不想要那样,我希望他们都有相同的优先级。只要他们属于同一个队列..

1个回答

15

我只是紧贴主题 :)

获取resque中的所有队列非常容易。

Resque.queues

这是一个所有队列名称的列表,但不包括“失败”队列,我做了类似如下的操作

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

非常感谢,虽然我不确定这是最佳方法,但它将让我为每个队列都设置一个工作者。我可能会扩展我的想法,让每个工作者处理多个队列,不过那只会用于优先级问题。 - baash05
你知道队列是否按字母顺序排序吗? - baash05
调用Redis.queues(https://github.com/resque/resque/blob/8a8fd83f1f32755734f0068d9f211aeb2fda1f9e/lib/resque.rb#L253)在Redis上使用了[SMEMBERS](http://redis.io/commands/SMEMBERS)操作。因为Redis是一个专为速度而设计的键值缓存/存储,所以SMEMBERS不会尝试对集合成员进行排序。因此,@baash05的问题的答案是否定的。 - sameers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接