Additional sidekiq middleware
November 26, 2013 ยท View on GitHub
This gem provides additional middleware for Sidekiq.
See Sidekiq Wiki for more details.
Installation
Add this line to your application's Gemfile:
gem 'sidekiq-middleware'
And then execute:
$ bundle
Or install it yourself as:
$ gem install sidekiq-middleware
Contents
UniqueJobs
Provides uniqueness for jobs.
Usage
Example worker:
class UniqueWorker
include Sidekiq::Worker
sidekiq_options({
# Should be set to true (enables uniqueness for async jobs)
# or :all (enables uniqueness for both async and scheduled jobs)
unique: :all,
# Unique expiration (optional, default is 30 minutes)
# For scheduled jobs calculates automatically based on schedule time and expiration period
expiration: 24 * 60 * 60
})
def perform
# Your code goes here
end
end
Custom lock key and manual expiration:
class UniqueWorker
include Sidekiq::Worker
sidekiq_options({
unique: :all,
expiration: 24 * 60 * 60,
# Set this to true when you need to handle locks manually.
# You'll be able to handle unique expiration inside your worker.
# Please see example below.
manual: true
})
# Implement your own lock string
def self.lock(id)
"locks:unique:#{id}"
end
# Implement method to handle lock removing manually
def self.unlock!(id)
lock = self.lock(id)
Sidekiq.redis { |conn| conn.del(lock) }
end
def perform(id)
# Your code goes here
# You are able to re-schedule job from perform method,
# Just remove lock manually before performing job again.
sleep 5
# Re-schedule!
self.class.unlock!(id)
self.class.perform_async(id)
end
end
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Added some feature') - Push to the branch (
git push origin my-new-feature) - Create new Pull Request




