Class: ActiveJob::QueueAdapters::ZizqAdapter

Inherits:
Object
  • Object
show all
Defined in:
lib/active_job/queue_adapters/zizq_adapter.rb

Overview

ActiveJob adapter for Zizq jobs.

To use, set the queue adapter in your Rails configuration:

# config/application.rb
config.active_job.queue_adapter = :zizq

And configure the Zizq client to dispatch to ActiveJob:

# config/initializers/zizq.rb
Zizq.configure do |c|
  c.url = "http://localhost:7890"
  c.dispatcher = ActiveJob::QueueAdapters::ZizqAdapter::Dispatcher
end

To use Zizq features (unique jobs, backoff, retention) with ActiveJob classes, you can extend ‘Zizq::ActiveJobConfig` in your classes:

class SendEmailJob < ApplicationJob
  extend Zizq::ActiveJobConfig

  zizq_unique true, scope: :active
  zizq_backoff exponent: 4.0, base: 15, jitter: 30
end

Defined Under Namespace

Modules: Dispatcher

Instance Method Summary collapse

Instance Method Details

#enqueue(job) ⇒ Object

Enqueue a job for immediate execution.



35
36
37
38
39
40
# File 'lib/active_job/queue_adapters/zizq_adapter.rb', line 35

def enqueue(job)
  result = Zizq.enqueue_raw(**build_enqueue_request(job).to_enqueue_params)
  job.provider_job_id = result.id
  job.successfully_enqueued = true
  result
end

#enqueue_all(jobs) ⇒ Object

Enqueue multiple jobs atomically in a single bulk request.

Called by ‘ActiveJob.perform_all_later` (Rails 7.1+). Returns the number of successfully enqueued jobs.



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/active_job/queue_adapters/zizq_adapter.rb', line 55

def enqueue_all(jobs)
  results = Zizq.enqueue_bulk do |b|
    jobs.each do |job|
      b.enqueue_raw(**build_enqueue_request(job).to_enqueue_params)
    end
  end

  jobs.zip(results).each do |job, result|
    job.provider_job_id = result.id
    job.successfully_enqueued = true
  end

  jobs.size
rescue => e
  jobs.each { |job| job.successfully_enqueued = false }
  raise e
end

#enqueue_at(job, timestamp) ⇒ Object

Enqueue a job for execution at a specific time.



43
44
45
46
47
48
49
# File 'lib/active_job/queue_adapters/zizq_adapter.rb', line 43

def enqueue_at(job, timestamp)
  job.scheduled_at = timestamp
  result = Zizq.enqueue_raw(**build_enqueue_request(job).to_enqueue_params)
  job.provider_job_id = result.id
  job.successfully_enqueued = true
  result
end