module Resque::DynamicQueues
def get_next_job(grouped_queues)
def get_next_job(grouped_queues) @n ||= 0 low_priority_queues = [] high_priority_queues = [] # Categorize queues as low_priority if its appinstance id is lower than current grouped_queues.sort_by { |app_instance_id, _| app_instance_id.to_i }.each do |app_instance_queues| app_instance_id, queues = app_instance_queues queues = get_categorized_queues(queues).to_h.values.flatten app_instance_id.to_i <= @n ? low_priority_queues.push(queues) : high_priority_queues.push(queues) end # Reorder queue groups by putting high priority queues in the front grouped_queues = (high_priority_queues + low_priority_queues). flatten. delete_if { |queue| !should_work_on_queue?(queue) }. map { |queue| "queue:#{queue}" } queue, payload = get_job_from_queues(grouped_queues) return nil if queue.blank? queue = queue.split("queue:")[1] # track last app instance id @n = queue.split('_').first.to_i return create_job(queue, Resque.decode(payload)) end