Current section
Files
Jump to
Current section
Files
lib/enqueue_mail.ex
defmodule EnqueueMail do
@moduledoc """
Documentation for EnqueuMail
Run as a worker for Supervisor
"""
use GenServer
use AMQP
@config Application.get_env(:enqueue_mail, __MODULE__, [])
def start_link(_) do
GenServer.start_link(__MODULE__, [], name: EnqueuMailServer)
end
def send_mail(payload) do
GenServer.cast(EnqueuMailServer, payload)
end
@impl true
def init(_opts) do
{:ok, conn} = Connection.open(@config[:amqp_server])
{:ok, chan} = Channel.open(conn)
{:ok, {conn, chan}}
end
@impl true
def handle_cast(payload, {conn, chan}) do
publish(chan, @config[:exchange], @config[:queue], payload)
{:noreply, {conn, chan}}
end
@impl true
def terminate(_payload, {_conn, _chan}) do
# Connection.close(conn)
end
defp publish(chan, exchange, queue, payload) do
Basic.publish(chan, exchange, queue, payload)
rescue
err ->
{:error, err}
end
end