Class: Sidekiq::QueueThrottled::Middleware

Inherits:
Object
  • Object
show all
Defined in:
lib/sidekiq/queue_throttled/middleware.rb

Instance Method Summary collapse

Constructor Details

#initializeMiddleware

Returns a new instance of Middleware.



6
7
8
9
# File 'lib/sidekiq/queue_throttled/middleware.rb', line 6

def initialize
  @queue_limiters = Concurrent::Map.new
  @job_throttlers = Concurrent::Map.new
end

Instance Method Details

#call(worker, job, queue, &block) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/sidekiq/queue_throttled/middleware.rb', line 11

def call(worker, job, queue, &block)
  queue_name = job['queue'] || queue
  job_class = worker.class.name

  # Check if we can process the job
  unless queue_slot_available?(queue_name, job)
    reschedule_job(job, queue_name, 'Queue limit reached')
    return
  end

  unless job_slot_available?(job_class, job['args'], job)
    reschedule_job(job, queue_name, 'Job throttling limit reached')
    return
  end

  # Process the job normally
  process_job(job, queue_name, job_class, &block)
end