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 ="     Jobs cannot be scheduled more than 15 minutes into the future.\n     See http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html\n     for further details!\n    MSG\n    raise RangeError, 'The maximum allowed delay is 15 minutes' if delay > 15.minutes\n  end\n\n  aws_sqs_client.send_message(\n    queue_url: queue_url,\n    message_body: message_body,\n    delay_seconds: delay,\n    message_attributes: {\n      \"message_digest\" => {\n        string_value: message_digest(message_body),\n        data_type: \"String\"\n      }\n    }\n  )\nend\n"