module Sidekiq::Throttled::Worker::ClassMethods

Helper methods added to the singleton class of destination

Public Instance Methods

sidekiq_throttle(**kwargs) click to toggle source

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
sidekiq_throttle_as(name) click to toggle source

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