Current section

Files

Jump to
core_utils lib amqp_service_utils.ex
Raw

lib/amqp_service_utils.ex

defmodule CoreUtils.AMQPServiceUtils do
alias GenAMQP.Client
alias CoreUtils.StructUtil
require Logger
def publish(conn_name, route, data) do
payload =
data
|> StructUtil.nested_parse()
|> Poison.encode!()
Client.publish_with_conn(conn_name , "", route, payload)
end
def call(conn_name, route, data, opts \\ []) do
payload =
data
|> StructUtil.nested_parse()
|> Poison.encode!()
case Client.call_with_conn(conn_name, "", route, payload, opts) do
{:error, :timeout} ->
message =
Poison.encode!(%{
error: "TIMEOUT",
route: route,
request_id: Process.get(:request_id),
payload: payload
})
CoreUtils.ErrorHandler.sentry_report(message, [])
Logger.warn("Timeout in microservice -#{route}- \n with payload: \n#{inspect(payload)}")
%{"status" => "error", "code" => 3, "message" => "Microservice request timeout"}
{:error, :amqp_conn} ->
message = Poison.encode!(%{route: route, payload: payload})
[message: message, level: :warn]
|> Sentry.Event.create_event()
|> Sentry.send_event()
%{"status" => "error", "code" => 4, "message" => "Rabbit connection could not be opened"}
payload ->
Poison.decode!(payload)
end
end
end