🌱 SEEDLING

Sidekiq

Table of Contents

Glossaries #

  • Job: A unit of work in your Ruby application.
  • Queue: A list of jobs which are ready to execute right now.
  • Process: A Sidekiq process with one or more threads for executing jobs.

Job lifecycle #

  • Enqueued: Waiting for being processed.
  • Scheduled: Configured to be run at some point in the future.
  • Busy: Currently being processed.
  • Retries: Will be automatically retried in the future.
  • Dead: Failed all retries. Limited by default to 10,000 jobs or 6 months.

API #

Creates a job class using command: rails g sidekiq:job my

class MyJob
  include Sidekiq::Job

  def perform(*args)
    # ...
  end
end

Enqueue a job #

MyJob.perform_async(1, 2, 3) # enqueued and perform later
MyJob.perform_in(5.minutes, 1, 2, 3) # scheduled to perform in 5 minutes
MyJob.perform_at(5.minutes.from_now, 1, 2, 3) # scheduled to perform at 5 minutes from now

Push a job using low-level API #

Sidekiq::Client.push('class' => MyJob, 'args' => [1, 2, 3])

Pro API #

Delete a specific job from queue #

queue = Sidekiq::Queue.new('default')
queue.delete_job(jid)

Delete a kind of jobs from queue #

queue = Sidekiq::Queue.new('default')
queue.delete_by_class(MyClass)

Pause and resume queue #

queue = Sidekiq::Queue.new('default')
queue.pause!
queue.paused? # => true
queue.unpause!

Retry #

Default max retries: 25.

Send failed job to the Retries set #

class MyJob
  include Sidekiq::Job
  sidekiq_options retry: 1
end

Send failed job straight to the Dead set #

class MyJob
  include Sidekiq::Job
  sidekiq_options retry: 0
end

Discard failed job directly #

class MyJob
  include Sidekiq::Job
  sidekiq_options retry: false
end

Set failed job to retry in a different queue #

class MyJob
  include Sidekiq::Job
  sidekiq_options queue: 'default', retry_queue: 'low'
end

Retry intervals increase based on the number of retries #

delay = (count**4) + 15
jitter = rand(10) * (count + 1)
retry_at = Time.now.to_f + delay + jitter

References #