ResqueSolo
ResqueSolo is a resque plugin to add unique jobs to resque.
It is a re-write of resque-loner.
It requires resque 1.25 or greater and works with ruby 2.3 and later.
It removes the dependency on Resque::Helpers
, which is deprecated for resque 2.0.
Install
Add the gem to your Gemfile:
gem "resque_solo"
To use with resque 2.0.0, which is unreleased as of 2018/7/24:
gem "resque", git: "https://github.com/resque/resque"
gem "resque_solo"
Usage
class UpdateCat
include Resque::Plugins::UniqueJob
@queue = :cats
def self.perform(cat_id)
# do something
end
end
If you attempt to queue a unique job multiple times, it is ignored:
Resque.enqueue UpdateCat, 1
=> true
Resque.enqueue UpdateCat, 1
=> nil
Resque.enqueue UpdateCat, 1
=> nil
Resque.size :cats
=> 1
Resque.enqueued? UpdateCat, 1
=> true
Resque.enqueued_in? :dogs, UpdateCat, 1
=> false
Options
lock_after_execution_period
By default, lock_after_execution_period is 0 and enqueued?
becomes false as soon as the job
is being worked on.
The lock_after_execution_period
setting can be used to delay when the unique job key is deleted
(i.e. when enqueued?
becomes false
). For example, if you have a long-running unique job that
takes around 10 seconds, and you don't want to requeue another job until you are sure it is done,
you could set lock_after_execution_period = 20
. Or if you never want to run a long running
job more than once per minute, set lock_after_execution_period = 60
.
class UpdateCat
include Resque::Plugins::UniqueJob
@queue = :cats
@lock_after_execution_period = 20
def self.perform(cat_id)
# do something
end
end
Development
Clone this repository, then:
Run tests with resque 1.x locally:
bundle
bundle exec rake test
Test supported versions of resque locally:
appraisal install
appraisal rake test