Sidekiq::Throttled
Concurrency and threshold throttling for Sidekiq.
Installation
Add this line to your application's Gemfile:
gem "sidekiq-throttled"
And then execute:
$ bundle
Or install it yourself as:
$ gem install sidekiq-throttled
Usage
Add somewhere in your app's bootstrap (e.g. config/initializers/sidekiq.rb
if
you are using Rails):
require "sidekiq/throttled"
Sidekiq::Throttled.setup!
Once you've done that you can include Sidekiq::Throttled::Worker
to your
job classes and configure throttling:
class MyWorker
include Sidekiq::Worker
include Sidekiq::Throttled::Worker
:queue => :my_queue
sidekiq_throttle({
# Allow maximum 10 concurrent jobs of this class at a time.
:concurrency => { :limit => 10 },
# Allow maximum 1K jobs being processed within one hour window.
:threshold => { :limit => 1_000, :period => 1.hour }
})
def perform
# ...
end
end
Dynamic throttling
You can throttle jobs dynamically with :key_suffix
option:
class MyWorker
include Sidekiq::Worker
include Sidekiq::Throttled::Worker
:queue => :my_queue
sidekiq_throttle({
# Allow maximum 10 concurrent jobs per user at a time.
:concurrency => { :limit => 10, :key_suffix => -> (user_id) { user_id } }
})
def perform(user_id)
# ...
end
end
Supported Ruby Versions
This library aims to support and is tested against the following Ruby versions:
- Ruby 2.0.0
- Ruby 2.1.x
- Ruby 2.2.x
- Ruby 2.3.0
Contributing
- Fork sidekiq-throttled on GitHub
- Make your changes
- Ensure all tests pass (
bundle exec rake
) - Send a pull request
- If we like them we'll merge them
- If we've accepted a patch, feel free to ask for commit access!
Copyright
Copyright (c) 2015 SensorTower Inc. See LICENSE.md for further details.