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:

  • Registry.add


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

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:

  • Registry.add_alias


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

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