class CrossServiceMessenger::Client

Client for send/pull messages from AWS SQS.

Constants

SEMAPHORE

Attributes

app[R]

App name

Public Class Methods

client() click to toggle source

Public: Get AWS SQS client.

@return [Aws::SQS::Client] the client.

# File lib/cross_service_messenger/client.rb, line 45
def client
  @client ||= Aws::SQS::Client.new(access_key_id:     CrossServiceMessenger.aws_access_key_id,
                                   secret_access_key: CrossServiceMessenger.aws_secret_access_key,
                                   region:            CrossServiceMessenger.aws_region)
end
new(app) click to toggle source

Public: Constructor.

@param app [Symbol] the app name.

# File lib/cross_service_messenger/client.rb, line 15
def initialize(app)
  @app = app
end
queue_urls() click to toggle source

Public: Get AWS SQS queue urls

@return [Hash<Symbol, String>] the queue urls.

# File lib/cross_service_messenger/client.rb, line 38
def queue_urls
  @queue_urls ||= {}
end

Public Instance Methods

pull() { |body| ... } click to toggle source

Public: Pull messages from app.

# File lib/cross_service_messenger/client.rb, line 27
def pull
  poller = Aws::SQS::QueuePoller.new(queue_url, client: self.class.client)
  poller.poll(idle_timeout: 5, wait_time_seconds: 5) do |msg|
    yield msg.body
  end
end
send_message(message_body) click to toggle source

Public: Send message.

@param message_body [String] the message.

# File lib/cross_service_messenger/client.rb, line 22
def send_message(message_body)
  self.class.client.send_message(queue_url: queue_url, message_body: message_body)
end

Private Instance Methods

queue_name() click to toggle source

Private: Get queue name.

@return [String] the queue name.

# File lib/cross_service_messenger/client.rb, line 68
def queue_name
  @queue_name ||= CrossServiceMessenger.queue_names.fetch(app)
end
queue_url() click to toggle source

Private: Get queue URL.

@return [String] the queue URL.

# File lib/cross_service_messenger/client.rb, line 57
def queue_url
  @queue_url ||= begin
    SEMAPHORE.synchronize do
      self.class.queue_urls[app] ||= self.class.client.get_queue_url(queue_name: queue_name).queue_url
    end
  end
end