1

我有一个 resque 工作陷入了一些糟糕的代码中,并且在反复故障转移后被无限地请求。我想以某种方式手动删除作业,但我不确定 redis 命名空间中的作业名称是什么。它不是“失败”,因为我正在捕捉实际的异常。在例外情况下,我使用 Resque.enqueue_in() 将作业添加回 resque 队列。我如何弄清楚 redis 中的作业名称是什么,以便我可以删除键/作业以防止发生?

4

1 回答 1

3

list如果你想从 redis 中删除消息,Resque 轮询一个 redis ,它本质上是一个队列,那么你可以试试这个

require "rubygems"
require "redis"
require 'redis/namespace'
redis = Redis.new
namespace ||= :resque

@redis = Redis::Namespace.new(namespace, :redis => redis)
## If you dont know how does the job payload look like then find inside the list
## normally the payload look like this 
## {'class' => 'ProcessCSV' , args => ['1'] }.to_json.inpsect 
list_job_payloads = @redis.lrange "queue:[my queue name]",0,-1

## then finally remove from the list
@redis.lrem "queue:[my_queue_name]",0,value

但我想更好的方法是像这样通过 resque 删除工作

考虑到以下是通过 resque 推送到您的 redis 列表的作业有效负载

 { 'class' => 'ProcessCSV', 'args' => ['1'] }

然后您可以使用删除有效负载

 Resque::Job.destroy(queue, 'ProcessCSV', '1')

它还在这里更详细地描述

于 2012-12-13T08:06:25.470 回答