🌱 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