class Circuitry::Provisioning::QueueCreator

Attributes

queue_name[RW]
visibility_timeout[RW]

Public Class Methods

find_or_create(queue_name, dead_letter_queue_name: nil, max_receive_count: 8, visibility_timeout: 30 * 60) click to toggle source
# File lib/circuitry/provisioning/queue_creator.rb, line 12
def self.find_or_create(queue_name,
                        dead_letter_queue_name: nil,
                        max_receive_count: 8,
                        visibility_timeout: 30 * 60)
  creator = new(queue_name, visibility_timeout)
  result = creator.create_queue
  creator.create_dead_letter_queue(dead_letter_queue_name, max_receive_count) if dead_letter_queue_name
  result
end
new(queue_name, visibility_timeout) click to toggle source
# File lib/circuitry/provisioning/queue_creator.rb, line 22
def initialize(queue_name, visibility_timeout)
  self.queue_name = queue_name
  self.visibility_timeout = visibility_timeout
end

Public Instance Methods

create_dead_letter_queue(name, max_receive_count) click to toggle source
# File lib/circuitry/provisioning/queue_creator.rb, line 31
def create_dead_letter_queue(name, max_receive_count)
  @dl_queue ||= Queue.new(create_dl_queue_internal(name, max_receive_count))
end
create_queue() click to toggle source
# File lib/circuitry/provisioning/queue_creator.rb, line 27
def create_queue
  @queue ||= Queue.new(create_primary_queue_internal)
end

Private Instance Methods

build_redrive_policy(deadletter_arn, max_receive_count) click to toggle source
# File lib/circuitry/provisioning/queue_creator.rb, line 52
def build_redrive_policy(deadletter_arn, max_receive_count)
  {
    'RedrivePolicy' => %({"maxReceiveCount":"#{max_receive_count}", "deadLetterTargetArn":"#{deadletter_arn}"})
  }
end
create_dl_queue_internal(name, max_receive_count) click to toggle source
# File lib/circuitry/provisioning/queue_creator.rb, line 40
def create_dl_queue_internal(name, max_receive_count)
  dl_url = sqs.create_queue(queue_name: name).queue_url
  dl_arn = sqs.get_queue_attributes(
    queue_url: dl_url,
    attribute_names: ['QueueArn']
  ).attributes['QueueArn']

  policy = build_redrive_policy(dl_arn, max_receive_count)
  sqs.set_queue_attributes(queue_url: create_queue.url, attributes: policy)
  dl_url
end
create_primary_queue_internal() click to toggle source
# File lib/circuitry/provisioning/queue_creator.rb, line 58
def create_primary_queue_internal
  attributes = { 'VisibilityTimeout' => visibility_timeout.to_s }
  sqs.create_queue(queue_name: queue_name, attributes: attributes).queue_url
end