module Sidekiq::Throttled::Worker::ClassMethods
Helper methods added to the singleton class of destination
Public Instance Methods
Registers some strategy for the worker.
@example Allow max 123 MyWorker jobs per hour
class MyWorker include Sidekiq::Worker include Sidekiq::Throttled::Worker sidekiq_throttle({ :threshold => { :limit => 123, :period => 1.hour } }) end
@example Allow max 10 concurrently running MyWorker jobs
class MyWorker include Sidekiq::Worker include Sidekiq::Throttled::Worker sidekiq_throttle({ :concurrency => { :limit => 10 } }) end
@example Allow max 10 concurrent MyWorker jobs and max 123 per hour
class MyWorker include Sidekiq::Worker include Sidekiq::Throttled::Worker sidekiq_throttle({ :threshold => { :limit => 123, :period => 1.hour }, :concurrency => { :limit => 10 } }) end
@see Registry.add
@return [void]
# File lib/sidekiq/throttled/worker.rb, line 76 def sidekiq_throttle(**kwargs) Registry.add(self, **kwargs) end
Adds current worker to preconfigured throtttling strtegy. Allows sharing same pool for multiple workers.
First of all we need to create shared throttling strategy:
# Create google_api throttling strategy Sidekiq::Throttled::Registry.add(:google_api, { :threshold => { :limit => 123, :period => 1.hour }, :concurrency => { :limit => 123 } })
Now we can assign it to our workers:
class FetchProfileJob include Sidekiq::Worker include Sidekiq::Throttled::Worker sidekiq_throttle_as :google_api end class FetchCommentsJob include Sidekiq::Worker include Sidekiq::Throttled::Worker sidekiq_throttle_as :google_api end
With the above configuration we ensure that there are maximum 10 concurrently running jobs of FetchProfileJob or FetchCommentsJob allowed. And only 123 jobs of those are executed per hour.
In other words, it will allow:
-
only `X` concurrent `FetchProfileJob`s
-
max `XX` `FetchProfileJob` per hour
-
only `Y` concurrent `FetchCommentsJob`s
-
max `YY` `FetchCommentsJob` per hour
Where `(X + Y) == 10` and `(XX + YY) == 123`
@see Registry.add_alias
@return [void]
# File lib/sidekiq/throttled/worker.rb, line 122 def sidekiq_throttle_as(name) Registry.add_alias(self, name) end