A Resque plugin. Requires Resque 1.7.0.
If you want only one instance of your job queued at a time, extend it with this module.
For example:
require 'resque/plugins/queue/lock'
class ExampleJob
extend Resque::Plugins::Queue::Lock
def self.perform(*args)
heavy_lifting
end
end
While this job is queued, no other ExampleJob jobs with the same arguments will be placed on the queue.
If you want to define the lock id yourself you can override the queue_lock
class method in your job class. It takes the same arguments as perform
. e.g.
class ExampleJob
extend Resque::Plugins::Queue::Lock
def self.queue_lock(*args)
"network-graph"
end
def self.perform(*args)
heavy_lifting
end
end
This differs from the Resque Lock plugin in that this plugin will allow jobs with the same lock key to be running and in the queue at the same time. It only prevents multiple jobs with the same lock from being in the queue.