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?