Resque Priority

Provides Resque with three levels of (named) priority for a single queue.

For example:

require 'resque/plugins/priority'

class Job
  extend Resque::Plugins::Priority

  @queue = :primary

  def self.perform(record)
    puts @queue #=> :primary_low
    puts @priority #=> :low
    other_stuff_and_junk
  end
end

# Enqueuing the job
Resque.enqueue_with_priority(:low, Job, params)

The above code creates a new Job in the :primary_low queue. There are three variations on the queues:

  • :high
  • :normal
  • :low

These three priorities produce queue names like, assuming @queue is set to "queuename", like:

  • :queuename_high
  • :queuename
  • :queuename_low

A Resque worker would then use a QUEUE variable like: QUEUE=queuename_high,queuename,queuename_low

Your Job self.perform methods have have two instance variables available to them: @queue and @priority. @queue is nothing new, it's provided by Resque by default, but Priority has appended the current priority to the existing value; resulting in the actual queue the job originated from (e.g. ":queuename_high"). @priority provides you with the priority (e.g. ":high") of the current job execution.