Module: Sidekiq::Throttled::Job::ClassMethods

Defined in:
lib/sidekiq/throttled/job.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 MyJob jobs per hour


class MyJob
  include Sidekiq::Job
  include Sidekiq::Throttled::Job

  sidekiq_throttle({
    :threshold => { :limit => 123, :period => 1.hour }
  })
end

Allow max 10 concurrently running MyJob jobs


class MyJob
  include Sidekiq::Job
  include Sidekiq::Throttled::Job

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

Allow max 10 concurrent MyJob jobs and max 123 per hour


class MyJob
  include Sidekiq::Job
  include Sidekiq::Throttled::Job

  sidekiq_throttle({
    :threshold => { :limit => 123, :period => 1.hour },
    :concurrency => { :limit => 10 }
  })
end

See Also:



76
77
78
# File 'lib/sidekiq/throttled/job.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 throttling strategy. 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 => 10 }
})

Now we can assign it to our workers:

class FetchProfileJob
  include Sidekiq::Job
  include Sidekiq::Throttled::Job

  sidekiq_throttle_as :google_api
end

class FetchCommentsJob
  include Sidekiq::Job
  include Sidekiq::Throttled::Job

  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:



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

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