【发布时间】:2011-09-24 12:14:18
【问题描述】:
Resque 可以同时运行许多类似的作业吗?如果是这样,您将如何设置工作人员来执行此操作?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 redis resque
Resque 可以同时运行许多类似的作业吗?如果是这样,您将如何设置工作人员来执行此操作?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 redis resque
我会看看Resque Pool gem,它可以很容易地为不同的队列设置多个工作人员。然后你可以按队列对类似的任务进行分组。
如果您还没有使用进程监控工具,resque-pool 可以帮助您通过单个守护进程管理您的工作。它还为您提供了一些方法来监控您的员工正在发生的事情。此外,它还可以让您通过一个简单的 yaml 文件轻松更改每个队列运行的工作人员数量。
【讨论】:
如果将COUNT 选项传递给 rake 任务,则可以运行多个工作器:
COUNT=5 QUEUE=* rake resque:workers
在生产中,您可以使用 God 之类的东西来保持您的流程运行。 Resque 项目有一个sample configuration script,它允许多个工作人员。
【讨论】:
God 来管理这些并行作业还是需要额外的东西?
God 只是让您的流程在生产中运行的一种方式;绝对不是必需的。队列的本质是,每当添加新作业时,下一个可用的工作人员都会接受它。因此,如果您有 5 个工人和 5 个工作,每个工人将运行一个工作(不过,这是一个粗略的概括——我不熟悉 Resque 的内部结构,不知道他们如何具体处理这个问题——例如,如果第一个工人在分配第五个工作之前完成了它的工作,第一个工人可能会得到它而不是最后一个工人)。
如果您使用 monit 进行监控,请注意每个工作人员有一个 pid 文件
#!/bin/sh
cd <path of app>/current/
for i in 3;
do
VVERBOSE=1 PIDFILE=<path of app>/shared/pids/resque_$i.pid RAILS_ENV=production QUEUE=name_of_queue bundle exec rake environment resque:work > <path of app>/shared/log/resque_$i.log
done
【讨论】: