2017-07-09 17:49:52 +00:00
|
|
|
# frozen_string_literal: true
|
2017-07-10 13:40:03 +00:00
|
|
|
|
2016-08-06 16:40:07 +00:00
|
|
|
require "que"
|
2014-05-19 18:09:45 +00:00
|
|
|
|
|
|
|
module ActiveJob
|
|
|
|
module QueueAdapters
|
2014-09-21 20:20:23 +00:00
|
|
|
# == Que adapter for Active Job
|
|
|
|
#
|
|
|
|
# Que is a high-performance alternative to DelayedJob or QueueClassic that
|
|
|
|
# improves the reliability of your application by protecting your jobs with
|
|
|
|
# the same ACID guarantees as the rest of your data. Que is a queue for
|
|
|
|
# Ruby and PostgreSQL that manages jobs using advisory locks.
|
|
|
|
#
|
|
|
|
# Read more about Que {here}[https://github.com/chanks/que].
|
|
|
|
#
|
|
|
|
# To use Que set the queue_adapter config to +:que+.
|
|
|
|
#
|
|
|
|
# Rails.application.config.active_job.queue_adapter = :que
|
2014-05-19 18:09:45 +00:00
|
|
|
class QueAdapter
|
2015-03-11 21:57:13 +00:00
|
|
|
def enqueue(job) #:nodoc:
|
2020-03-04 12:32:23 +00:00
|
|
|
que_job = JobWrapper.enqueue job.serialize, priority: job.priority, queue: job.queue_name
|
2015-05-07 15:25:49 +00:00
|
|
|
job.provider_job_id = que_job.attrs["job_id"]
|
|
|
|
que_job
|
2015-03-11 21:57:13 +00:00
|
|
|
end
|
2014-05-20 15:44:00 +00:00
|
|
|
|
2015-03-11 21:57:13 +00:00
|
|
|
def enqueue_at(job, timestamp) #:nodoc:
|
2020-03-04 12:32:23 +00:00
|
|
|
que_job = JobWrapper.enqueue job.serialize, priority: job.priority, queue: job.queue_name, run_at: Time.at(timestamp)
|
2015-05-07 15:25:49 +00:00
|
|
|
job.provider_job_id = que_job.attrs["job_id"]
|
|
|
|
que_job
|
2014-05-19 18:09:45 +00:00
|
|
|
end
|
|
|
|
|
2014-09-17 19:46:53 +00:00
|
|
|
class JobWrapper < Que::Job #:nodoc:
|
2014-08-25 14:34:50 +00:00
|
|
|
def run(job_data)
|
|
|
|
Base.execute job_data
|
2014-05-19 18:09:45 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|