Class: ActiveJob::QueueAdapters::ActiveElasticJobAdapter

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

Overview

Active Elastic Job adapter for Active Job

Active Elastic Job provides (1) an adapter (this class) for Rails’ Active Job framework and (2) a Rack middleware to process job requests, which are sent by the SQS daemon running in Amazon Elastic Beanstalk worker environments.

This adapter serializes job objects and sends them as a message to an Amazon SQS queue specified by the job’s queue name, see ActiveJob::Base.queue_as

To use Active Elastic Job, set the queue_adapter config to :active_elastic_job.

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

Class Method Summary collapse

Class Method Details

.enqueue(job) ⇒ Object

:nodoc:



18
19
20
# File 'lib/active_job/queue_adapters/active_elastic_job_adapter.rb', line 18

def enqueue(job) #:nodoc:
  enqueue_at(job, Time.now)
end

.enqueue_at(job, timestamp) ⇒ Object

:nodoc:



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/active_job/queue_adapters/active_elastic_job_adapter.rb', line 22

def enqueue_at(job, timestamp) #:nodoc:
  queue_url = aws_sqs_client.create_queue(queue_name: job.queue_name.to_s).queue_url
  message_body = JSON.dump(job.serialize)
  delay = (timestamp - Time.current.to_f).to_i + 1
  if delay > 15.minutes
    msg =<<-MSG
     Jobs cannot be scheduled more than 15 minutes into the future.
     See http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html
     for further details!
    MSG
    raise RangeError, 'The maximum allowed delay is 15 minutes' if delay > 15.minutes
  end

  aws_sqs_client.send_message(
    queue_url: queue_url,
    message_body: message_body,
    delay_seconds: delay,
    message_attributes: {
      "message_digest" => {
        string_value: message_digest(message_body),
        data_type: "String"
      }
    }
  )
end