Packages

Rentbrella's aws' SQS' package.

Current section

Files

Jump to
lib_aws_elixir_eventbus lib eventbus event_bus queue receiver.ex
Raw

lib/eventbus/event_bus/queue/receiver.ex

defmodule EventBus.Queue.Receiver do
alias ExAws.SQS
alias EventBus.SQSMessage
@doc "Query SQS for new messages"
@spec run(binary, Keyword.t()) :: {:ok, list(SQSMessage.t())} | {:error, any}
def run(queue_name, _opts \\ []) do
queue_name
|> SQS.receive_message(max_number_of_messages: 10)
|> ExAws.request()
|> unpack_message(queue_name)
end
def run(), do: run(System.get_env("AWS_SQS_QUEUE"))
defp unpack_message({:error, reason}, _),
do: {:error, reason}
defp unpack_message({:ok, %{body: %{messages: messages}}}, queue_name) do
Enum.map(messages, fn message ->
EventBus.SQSMessage.new(message, queue_name)
end)
end
end