繁体   English   中英

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

[英]Programmatically get the number of jobs in a Resque queue

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

我的问题是,在我的 redis 服务器上,我看到有很多与 Resque 相关的密钥和混乱。 我不一定看到获得每个队列的作业数或​​失败作业数的直接方法。 目前是否有一种简单的方法可以从 redis 中获取这些数据?

是的,这很容易,因为您使用的是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 #in 我的例子

要获取队列,请使用:

Resque.queues

这将返回一个数组

例如/ =>

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

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

Resque.size(queue_name)

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

这是一个 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 可能有不同的键名。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM