class Sidekiq::Middleware::Server::Limiter
Constants
- DEFAULT_INTERVAL
Public Class Methods
new(options = {})
click to toggle source
# File lib/sidekiq/limiter.rb, line 11 def initialize(options = {}) @queues = Sidekiq.options[:process_limits] @interval = options.fetch(:interval, DEFAULT_INTERVAL) end
Public Instance Methods
call(worker, msg, queue) { || ... }
click to toggle source
# File lib/sidekiq/limiter.rb, line 16 def call(worker, msg, queue) if @queues[queue] && is_busy? Sidekiq::Client.push('queue' => queue, 'class' => worker.class.name, 'args' => msg['args'], 'at' => (Time.now + @interval).to_f) else yield end end
is_busy?()
click to toggle source
# File lib/sidekiq/limiter.rb, line 25 def is_busy? Sidekiq.redis do |conn| workers_count = conn.smembers('workers').count do |w| next unless w =~ /^#{hostname}/ options = conn.get("worker:#{w}") next unless options options = Sidekiq.load_json(options) @queues[options['queue']] end workers_count >= 2 end end