This gem provides additional middleware for Sidekiq.
See Sidekiq Wiki for more details.
Add this line to your application's Gemfile:
gem 'sidekiq-middleware'
And then execute:
$ bundle
Or install it yourself as:
$ gem install sidekiq-middleware
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
- 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