以编程方式获取 Resque 队列中的作业数
Posted
技术标签:
【中文标题】以编程方式获取 Resque 队列中的作业数【英文标题】:Programmatically get the number of jobs in a Resque queue 【发布时间】:2012-06-29 10:08:50 【问题描述】:我有兴趣设置一个监控服务,只要 Resque 队列中有太多作业(我有大约 6 个队列,每个队列都有不同的编号),它就会呼叫我。我还想设置一个非常相似的监控服务,当我的队列中超过一定数量的失败作业时会提醒我。
我的问题是,我在我的 redis 服务器上看到了很多与 Resque 相关的密钥和混乱。我不一定看到一种直接的方法来获取每个队列的作业数或失败的作业数。目前有没有一种简单的方法可以从 redis 中获取这些数据?
【问题讨论】:
是否也可以获取每个队列的运行时间?比如,队列运行了多长时间? 【参考方案1】:是的,这很容易,因为您使用的是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])
.....
【讨论】:
感谢您提供非常有用的帖子 救了我的命!谢谢! 这看起来很棒,但它似乎并没有像我在 Resque Web 中看到的那样给我当前的失败作业数量。即使我已经删除了它们,它看起来更像是失败作业的历史计数。 对于希望获得当前失败的工作而不是总数的其他人,您可以使用Resque::Failure.count
【参考方案2】:
这是一个 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 可能有不同的键名。
【讨论】:
【参考方案3】:还有一个方法Resque.queue_sizes
,它返回队列名称和大小的哈希
Resque.queue_sizes => "默认"=>0, "慢"=>0
【讨论】:
以上是关于以编程方式获取 Resque 队列中的作业数的主要内容,如果未能解决你的问题,请参考以下文章