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
    if ZuoraConnect.configuration.blpop_queue
      @job_in_progress = get_restricted_job
      return @job_in_progress if @job_in_progress.present?
      return @job_in_progress = get_queued_job(grouped_queues)
    else
      @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
    end
  else 
    return reserve_without_round_robin
  end
  
rescue Exception => e
  log "Error reserving job: #{e.inspect}"
  log e.backtrace.join("\n")
  raise e
end