123456789_123456789_123456789_123456789_123456789_

Class: ActiveJob::QueueAdapters::QueueClassicAdapter

Relationships & Source Files
Namespace Children
Classes:
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Instance Chain:
Inherits: ActiveJob::QueueAdapters::AbstractAdapter
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

Class Method Summary

Instance Attribute Summary

AbstractAdapter - Inherited

#enqueue_after_transaction_commit?

Defines whether enqueuing should happen implicitly to after commit when called from inside a transaction.

Instance Method Summary

AbstractAdapter - Inherited

Constructor Details

.new(enqueue_after_transaction_commit: false) ⇒ QueueClassicAdapter

[ GitHub ]

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

def initialize(enqueue_after_transaction_commit: false)
  @enqueue_after_transaction_commit = enqueue_after_transaction_commit
end

Instance Attribute Details

#enqueue_after_transaction_commit?Boolean (readonly)

This method is for internal use only.
[ GitHub ]

  
# File 'activejob/lib/active_job/queue_adapters/queue_classic_adapter.rb', line 26

def enqueue_after_transaction_commit? # :nodoc:
  @enqueue_after_transaction_commit
end

Instance Method Details

#build_queue(queue_name)

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

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

[ GitHub ]

  
# File 'activejob/lib/active_job/queue_adapters/queue_classic_adapter.rb', line 53

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

#enqueue(job)

This method is for internal use only.
[ GitHub ]

  
# File 'activejob/lib/active_job/queue_adapters/queue_classic_adapter.rb', line 30

def enqueue(job) # :nodoc:
  qc_job = build_queue(job.queue_name).enqueue("#{JobWrapper.name}.perform", job.serialize)
  job.provider_job_id = qc_job["id"] if qc_job.is_a?(Hash)
  qc_job
end

#enqueue_at(job, timestamp)

This method is for internal use only.
[ GitHub ]

  
# File 'activejob/lib/active_job/queue_adapters/queue_classic_adapter.rb', line 36

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
  qc_job = queue.enqueue_at(timestamp, "#{JobWrapper.name}.perform", job.serialize)
  job.provider_job_id = qc_job["id"] if qc_job.is_a?(Hash)
  qc_job
end