如何销毁由 resque 工作人员排队的工作?

发布于 2024-11-04 15:57:51 字数 255 浏览 3 评论 0原文

我在 Rails-3 项目上使用 Resque 来处理计划每 5 分钟运行一次的作业。我最近做了一些事情,使这些工作岗位的创造如滚雪球般增长,目前该堆栈已达到 1000 多个工作岗位。我修复了导致许多作业排队的问题,现在我遇到的问题是由错误创建的作业仍然存在,因此测试某些内容变得很困难,因为一个作业被添加到具有 1000 多个作业的队列中。 我似乎无法停止这些工作。我尝试使用flushall命令从redis-cli中删除队列,但它不起作用。我错过了什么吗?因为我似乎找不到摆脱这些工作的方法。

I'm using Resque on a rails-3 project to handle jobs that are scheduled to run every 5 minutes. I recently did something that snowballed the creation of these jobs and the stack has hit over 1000 jobs. I fixed the issue that caused that many jobs to be queued and now the problem I have is that the jobs created by the bug are still there and therefore It becomes difficult to test something since a job is added to a queue with 1000+ jobs.
I can't seem to stop these jobs. I have tried removing the queue from the redis-cli using the flushall command but it didn't work. Am I missing something? coz I can't seem to find a way of getting rid of these jobs.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

一张白纸 2024-11-11 15:57:51

根据上述答案,如果您需要清除所有队列,可以使用以下命令:

Resque.queues.each{|q| Resque.redis.del "queue:#{q}" }

Playing off of the above answers, if you need to clear all of your queues, you could use the following:

Resque.queues.each{|q| Resque.redis.del "queue:#{q}" }
迷鸟归林 2024-11-11 15:57:51

如果您弹出 Rails 控制台,则可以运行以下代码来清除队列:

queue_name = "my_queue"
Resque.redis.del "queue:#{queue_name}"

If you pop open a rails console, you can run this code to clear out your queue(s):

queue_name = "my_queue"
Resque.redis.del "queue:#{queue_name}"
骄傲 2024-11-11 15:57:51

Resque 已经有一个方法可以做到这一点 - 尝试 Resque.remove_queue(queue_name) (请参阅文档 这里)。它在内部执行 Resque.redis.del(),但它也执行其他清理工作,并且通过使用 api 方法(而不是假设 resque 如何工作),您将更加面向未来。

Resque already has a method for doing this - try Resque.remove_queue(queue_name) (see the documentation here). Internally it performs Resque.redis.del(), but it also does other cleanup, and by using an api method (rather than making assumptions about how resque works) you'll be more future-proof.

小兔几 2024-11-11 15:57:51

更新了用于清理的 rake 任务(根据最新的 redis 命令更改):https://gist.github.com/1228863

Updated rake task for clearing (according to latest redis commands changes): https://gist.github.com/1228863

灯角 2024-11-11 15:57:51

现在是这样的:

Resque.remove_queue("...")

This is what works now:

Resque.remove_queue("...")
森林迷了鹿 2024-11-11 15:57:51

使用 Resque API 比删除 Resque 的 Redis 上的所有内容更安全、更可靠。 Resque 在内部做了一些清洁工作。

如果要删除所有队列和关联的排队作业:

Resque.queues.each {|queue| Resque.remove_queue(queue)}

下次作业排队时将重新创建队列。

文档

It's safer and bulletproof to use the Resque API rather than deleting everything on the Resque's Redis. Resque does some cleaning in the inside.

If you want to remove all queues and associated enqueued jobs:

Resque.queues.each {|queue| Resque.remove_queue(queue)}

The queues will be re-created the next time a job is enqueued.

Documentation

三生一梦 2024-11-11 15:57:51

进入redis控制台:

redis-cli

列出数据库:

127.0.0.1:6379> KEYS *
 1) "resque:schedules_changed"
 2) "resque:workers"
 3) "resque:queue:your_overloaded_queue"

“resque:queue:your_overloaded_queue” - 您需要的数据库。

然后运行:

DEL resque:queue:your_overloaded_queue

或者,如果您想删除队列中的指定作业,则使用 LRANGE 命令:

127.0.0.1:6379> LRANGE resque:queue:your_overloaded_queue 0 2
1) "{\"class\":\"AppClass\",\"args\":[]}"
2) "{\"class\":\"AppClass\",\"args\":[]}"
3) "{\"class\":\"AppClass\",\"args\":[]}"

然后将一个值复制/粘贴到 LREM 命令:

127.0.0.1:6379> LREM resque:queue:your_overloaded_queue 5 "{\"class\":\"AppClass\",\"args\":[]}"
(integer) 5

其中 5 - 数量要删除的元素。

Enter redis console:

redis-cli

List databases:

127.0.0.1:6379> KEYS *
 1) "resque:schedules_changed"
 2) "resque:workers"
 3) "resque:queue:your_overloaded_queue"

"resque:queue:your_overloaded_queue" - db which you need.

Then run:

DEL resque:queue:your_overloaded_queue

Or if you want to delete specified jobs in queue then list few values from db with LRANGE command:

127.0.0.1:6379> LRANGE resque:queue:your_overloaded_queue 0 2
1) "{\"class\":\"AppClass\",\"args\":[]}"
2) "{\"class\":\"AppClass\",\"args\":[]}"
3) "{\"class\":\"AppClass\",\"args\":[]}"

Then copy/paste one value to LREM command:

127.0.0.1:6379> LREM resque:queue:your_overloaded_queue 5 "{\"class\":\"AppClass\",\"args\":[]}"
(integer) 5

Where 5 - number of elements to remove.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文