以编程方式获取Resque队列中的作业数

ran*_*its 55 ruby ruby-on-rails resque redis

我有兴趣设置一个监控服务,只要在Resque队列中有太多的工作就会给我发信息(我有大约6个队列,每个队列都有不同的编号).我还想设置一个非常相似的监控服务,当我在队列中超过一定数量的失败作业时,它会提醒我.

我的问题是,我在redis服务器上看到与Resque有关的密钥和混乱.我不一定能看到一种直接的方法来获得每个队列的作业数或​​失败的作业数.目前有一种从redis获取此数据的简单方法吗?

gef*_*gef 133

是的,这很容易,因为你正在使用Resque gem:

require 'resque'

Resque.info 
Run Code Online (Sandbox Code Playgroud)

将返回哈希值

例如/ =>

{
      :pending => 54338,
      :processed => 12772,
      :queues => 2,
      :workers => 0,
      :working => 0,
      :failed => 8761,
      :servers => [
      [0] "redis://192.168.1.10:6379/0"
    ],
    :environment => "development"
}
Run Code Online (Sandbox Code Playgroud)

因此,要获得失败的工作计数,只需使用:

Resque.info[:failed]
Run Code Online (Sandbox Code Playgroud)

在我的例子中,它会给=> 8761#

要使用队列:

Resque.queues
Run Code Online (Sandbox Code Playgroud)

这会返回一个数组

例如/ =>

[
    [0] "superQ",
    [1] "anotherQ"
]
Run Code Online (Sandbox Code Playgroud)

然后,您可以找到每个队列的作业数:

Resque.size(queue_name)
Run Code Online (Sandbox Code Playgroud)

例如/ Resque.size("superQ")Resque.size(Resque.queues[0]) .....

HTH?

  • 这太棒了.谢谢! (3认同)
  • 感谢非常有用的帖子 (3认同)
  • 救了我的命!Thankss! (3认同)
  • 这是非常有益的.感谢分享. (3认同)
  • 对于希望获得当前失败的工作而不是总数的其他人,您可以使用 `Resque::Failure.count` (2认同)

The*_*Who 8

这是一个bash脚本,它将监视排队的作业总数和失败的作业数.

while :
do 
  let sum=0
  let errors=$(redis-cli llen resque:failed)
  for s in $(redis-cli keys resque:queue:*)
  do 
    let sum=$sum+$(redis-cli llen $s)
  done
  echo $sum jobs queued, with $errors errors
  sleep 1 # sleep 1 second, probably want to increase this
done
Run Code Online (Sandbox Code Playgroud)

这适用于Resque 1.X,2.0可能有不同的键名.


Jos*_*hua 5

还有一个方法Resque.queue_sizes返回队列名称和大小的哈希值

Resque.queue_sizes => {"default"=>0, "slow"=>0}