Module: Sidekiq::Throttled::Worker::ClassMethods

Defined in:
lib/sidekiq/throttled/worker.rb

Overview

Helper methods added to the singleton class of destination

Instance Method Summary collapse

Instance Method Details

#sidekiq_throttle(**kwargs) ⇒ void

This method returns an undefined value.

Registers some strategy for the worker.

Examples:

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

Allow max 10 concurrently running MyWorker jobs


class MyWorker
  include Sidekiq::Worker
  include Sidekiq::Throttled::Worker

  sidekiq_throttle({
    :concurrency => { :limit => 10 }
  })
end

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 Also:



75
76
77
# File 'lib/sidekiq/throttled/worker.rb', line 75

def sidekiq_throttle(**kwargs)
  Registry.add(self, **kwargs)
end

#sidekiq_throttle_as(name) ⇒ void

This method returns an undefined value.

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 Also:



121
122
123
# File 'lib/sidekiq/throttled/worker.rb', line 121

def sidekiq_throttle_as(name)
  Registry.add_alias(self, name)
end