class Sidekiq::PriorityQueue::Client
Public Instance Methods
call(worker_class, item, queue, redis_pool) { || ... }
click to toggle source
inserted into Sidekiq's Client
as middleware
# File lib/sidekiq/priority_queue/client.rb, line 6 def call(worker_class, item, queue, redis_pool) if item['priority'] sadd('priority-queues', queue) zadd(queue, item['priority'], item) return item['jid'] elsif item['subqueue'] # replace the proc with what it returns sadd('priority-queues', queue) item['subqueue'] = resolve_subqueue(item['subqueue'], item['args']) priority = fetch_and_add(queue, item['subqueue'], item) zadd(queue, priority, item) return item['jid'] else # continue pushing the normal Sidekiq way yield end end
Private Instance Methods
fetch_and_add(queue, subqueue, item)
click to toggle source
# File lib/sidekiq/priority_queue/client.rb, line 46 def fetch_and_add(queue, subqueue, item) Sidekiq.redis do |conn| priority = conn.zincrby("priority-queue-counts:#{queue}", 1, subqueue) end end
resolve_subqueue(subqueue, job_args)
click to toggle source
# File lib/sidekiq/priority_queue/client.rb, line 26 def resolve_subqueue(subqueue, job_args) return subqueue unless subqueue.respond_to?(:call) subqueue.call(job_args) end
sadd(set, member)
click to toggle source
# File lib/sidekiq/priority_queue/client.rb, line 40 def sadd(set, member) Sidekiq.redis do |conn| conn.sadd(set,member) end end
zadd(queue, score, item)
click to toggle source
# File lib/sidekiq/priority_queue/client.rb, line 32 def zadd(queue, score, item) Sidekiq.redis do |conn| queue = "priority-queue:#{queue}" conn.zadd(queue, score, item.to_json) return item end end