Resque:每个队列一名工作人员
我目前有一个Rails 3.0项目,Ruby 1.9.2和Resque。
我的应用程序有多个工作程序类和多个队列,这些是动态创建的(在运行时)。 另外,有多名员工可以自由地在任何队列中工作,因为在开始时没有任何现有的队列,并且他们无法预测:
$ COUNT=3 QUEUE=* rake resque:workers
根据project
ID创建队列:
@queue = "project_#{project.id}".to_sym
对于给定的队列,他们的工作必须按顺序处理,并且一次处理一个。 我的问题是,通过让多个工作人员并行处理多个工作。
有没有办法设置每个队列的最大工作人员数量(至1)? 有一种方法可以在作业正在处理时锁定队列吗?
谢谢!
我终于来到一个非常简单的解决方案,使用redis重试和锁存储在redis中(我正在为用户做这个,只是为项目做):https://stackoverflow.com/a/10933666/745266
我想到的第一个解决方案是在另一个工作人员轮询同一队列时,检查是否有任何工作人员在给定队列中工作。 这可以通过重新实现Resque::Job.reserve(queue)
来完成:
module Resque
class Job
def self.reserve(queue)
Resque::Worker.working.each do |worker|
# if already working in the same queue
if worker.job['queue'] == queue
return
end
end
return unless payload = Resque.pop(queue)
new(queue, payload)
end
end
end
一个可能的问题将是比赛条件。 思考?
Resque-pool可以帮助您指定每个队列的工作人员数量。
https://github.com/nevans/resque-pool
链接地址: http://www.djcxy.com/p/57555.html上一篇: Resque: one worker per queue
下一篇: Can you cache sound files in an iOS web app using a manifest or Web Storage?