module Resque::DynamicQueues
def reserve_with_round_robin
def reserve_with_round_robin grouped_queues = queues.sort.group_by{|u| /(\d{1,20})_.*/.match(u) ? /(\d{1,20})_.*/.match(u).captures.first : nil} #Instance queue grouping if !grouped_queues.keys.include?(nil) && grouped_queues.keys.size > 0 @n ||= 0 @n += 1 @n = @n % grouped_queues.keys.size grouped_queues.keys.rotate(@n).each do |key| grouped_queues[key].each do |queue| log! "Checking #{queue}" if should_work_on_queue?(queue) && @job_in_progress = Resque::Job.reserve(queue) log! "Found job on #{queue}" return @job_in_progress end end @n += 1 # Start the next search at the queue after the one from which we pick a job. end nil else return reserve_without_round_robin end rescue Exception => e log "Error reserving job: #{e.inspect}" log e.backtrace.join("\n") raise e end