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

Defined Under Namespace

Classes: Error, NonExistentQueue, SerializedJobTooBig

Constant Summary collapse

MAX_MESSAGE_SIZE =
(256 * 1024)

Class Method Summary collapse

Class Method Details

.enqueue(job) ⇒ Object

:nodoc:



61
62
63
# File 'lib/active_job/queue_adapters/active_elastic_job_adapter.rb', line 61

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

.enqueue_at(job, timestamp) ⇒ Object

:nodoc:



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/active_job/queue_adapters/active_elastic_job_adapter.rb', line 65

def enqueue_at(job, timestamp) #:nodoc:
  queue_url = nil
  begin
    resp = aws_sqs_client.get_queue_url(queue_name: job.queue_name.to_s)
    queue_url = resp.queue_url
  rescue Aws::SQS::Errors::NonExistentQueue => e
    raise NonExistentQueue, job
  end
  serialized_job = JSON.dump(job.serialize)
  check_job_size!(serialized_job)
  aws_sqs_client.send_message(
    queue_url: queue_url,
    message_body: serialized_job,
    delay_seconds: calculate_delay(timestamp),
    message_attributes: {
      "message_digest" => {
        string_value: message_digest(serialized_job),
        data_type: "String"
      }
    }
  )
end