Class: ActiveJob::QueueAdapters::QueueClassicAdapter

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

Overview

queue_classic adapter for Active Job

queue_classic provides a simple interface to a PostgreSQL-backed message queue. queue_classic specializes in concurrent locking and minimizing database load while providing a simple, intuitive developer experience. queue_classic assumes that you are already using PostgreSQL in your production environment and that adding another dependency (e.g. redis, beanstalkd, 0mq) is undesirable.

Read more about queue_classic here.

To use queue_classic set the queue_adapter config to :queue_classic.

Rails.application.config.active_job.queue_adapter = :queue_classic

Defined Under Namespace

Classes: JobWrapper

Class Method Summary collapse

Class Method Details

.build_queue(queue_name) ⇒ Object

Builds a QC::Queue object to schedule jobs on.

If you have a custom QC::Queue subclass you'll need to subclass ActiveJob::QueueAdapters::QueueClassicAdapter and override the build_queue method.


40
41
42
# File 'activejob/lib/active_job/queue_adapters/queue_classic_adapter.rb', line 40

def build_queue(queue_name)
  QC::Queue.new(queue_name)
end

.enqueue(job) ⇒ Object

:nodoc:


21
22
23
# File 'activejob/lib/active_job/queue_adapters/queue_classic_adapter.rb', line 21

def enqueue(job) #:nodoc:
  build_queue(job.queue_name).enqueue("#{JobWrapper.name}.perform", job.serialize)
end

.enqueue_at(job, timestamp) ⇒ Object

:nodoc:


25
26
27
28
29
30
31
32
33
# File 'activejob/lib/active_job/queue_adapters/queue_classic_adapter.rb', line 25

def enqueue_at(job, timestamp) #:nodoc:
  queue = build_queue(job.queue_name)
  unless queue.respond_to?(:enqueue_at)
    raise NotImplementedError, 'To be able to schedule jobs with queue_classic ' \
      'the QC::Queue needs to respond to `enqueue_at(timestamp, method, *args)`. ' \
      'You can implement this yourself or you can use the queue_classic-later gem.'
  end
  queue.enqueue_at(timestamp, "#{JobWrapper.name}.perform", job.serialize)
end