当以下面形式启动worker时,worker每次读取redis总是会优先获取file_serve队列任务,当file_serve找不到,才会去找warm_cache队列

QUEUES=file_serve,warm_cache rake resque:work

源码如下。

循环去reserve出一个job,而reserve是按QUEUES的顺序来读job的

# lib/resque/worker.rb

def work(interval = 5.0, &block)
  interval = Float(interval)
  $0 = "resque: Starting"
  startup

  loop do
    break if shutdown?

    if not paused? and job = reserve
      # ...
          perform(job, &block)
      # ...
    else
      # ...
      sleep interval
    end
  end
end

def reserve
  queues.each do |queue|
    log! "Checking #{queue}"
    if job = Resque.reserve(queue)
      log! "Found job on #{queue}"
      return job
    end
  end
  # ...
end