ruby on rails-以编程方式获取Resque队列中的作业数

我有兴趣设置一个监视服务,当Resque队列中的作业太多时,该服务将为我分页(我有大约6个队列,每个队列有不同的编号)。 我还想设置一个非常类似的监视服务,当我在队列中超过一定数量的失败作业时,它将提醒我。

我的问题是,我在Redis服务器上看到很多与Resque相关的键和混乱。 我不一定看到一种简单的方法来获取每个队列的作业数或失败的作业数。 当前是否有一种简单的方法来从Redis抓取这些数据?

randombits asked 2019-11-16T08:24:45Z
2个解决方案
133 votes

是的,这很简单,因为您正在使用Resque gem:

require 'resque'

Resque.info 

将返回哈希

例如/ =>

{
      :pending => 54338,
      :processed => 12772,
      :queues => 2,
      :workers => 0,
      :working => 0,
      :failed => 8761,
      :servers => [
      [0] "redis://192.168.1.10:6379/0"
    ],
    :environment => "development"
}

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

Resque.info[:failed]

这会给=> 8761#在我的示例中

要获取队列,请使用:

Resque.queues

这将返回一个数组

例如/ =>

[
    [0] "superQ",
    [1] "anotherQ"
]

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

Resque.size(queue_name)

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

HTH?

gef answered 2019-11-16T08:26:23Z
8 votes

这是一个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

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

The Who answered 2019-11-16T08:26:54Z
translate from https://stackoverflow.com:/questions/11235318/programmatically-get-the-number-of-jobs-in-a-resque-queue