module Resque::DynamicQueues

def reserve_with_round_robin

def reserve_with_round_robin
  grouped_queues = self.get_grouped_queues
  #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|
      self.get_categorized_queues(grouped_queues[key]).each do |key, queues|
        queues.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
      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