From 11d1065326b13bc5fb12f90a97fa0997e67e87e1 Mon Sep 17 00:00:00 2001 From: Jeff Weiss Date: Tue, 22 Dec 2015 00:38:08 -0800 Subject: [PATCH] Add Elixir source for tutorial 4 --- elixir/emit_log_direct.exs | 28 +++++++++++++++++++++++++++ elixir/receive_logs_direct.exs | 35 ++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 elixir/emit_log_direct.exs create mode 100644 elixir/receive_logs_direct.exs diff --git a/elixir/emit_log_direct.exs b/elixir/emit_log_direct.exs new file mode 100644 index 00000000..ed87acb9 --- /dev/null +++ b/elixir/emit_log_direct.exs @@ -0,0 +1,28 @@ +{:ok, connection} = AMQP.Connection.open +{:ok, channel} = AMQP.Channel.open(connection) + +{severities, raw_message, _} = + System.argv + |> OptionParser.parse(strict: [info: :boolean, + warning: :boolean, + error: :boolean]) + |> case do + {[], msg, _} -> {[info: true], msg, []} + other -> other + end + +message = + case raw_message do + [] -> "Hello World!" + words -> Enum.join(words, " ") + end + +AMQP.Exchange.declare(channel, "direct_logs", :direct) + +for {severity, true} <- severities do + severity = severity |> to_string + AMQP.Basic.publish(channel, "direct_logs", severity, message) + IO.puts " [x] Sent '[#{severity}] #{message}'" +end + +AMQP.Connection.close(connection) diff --git a/elixir/receive_logs_direct.exs b/elixir/receive_logs_direct.exs new file mode 100644 index 00000000..c4757c39 --- /dev/null +++ b/elixir/receive_logs_direct.exs @@ -0,0 +1,35 @@ +defmodule ReceiveLogsDirect do + def wait_for_messages(channel) do + receive do + {:basic_deliver, payload, meta} -> + IO.puts " [x] Received [#{meta.routing_key}] #{payload}" + + wait_for_messages(channel) + end + end +end + +{:ok, connection} = AMQP.Connection.open +{:ok, channel} = AMQP.Channel.open(connection) + +{severities, _, _} = + System.argv + |> OptionParser.parse(strict: [info: :boolean, + warning: :boolean, + error: :boolean]) + +AMQP.Exchange.declare(channel, "direct_logs", :direct) + +{:ok, %{queue: queue_name}} = AMQP.Queue.declare(channel, "", exclusive: true) + +for {severity, true} <- severities do + binding_key = severity |> to_string + AMQP.Queue.bind(channel, queue_name, "direct_logs", routing_key: binding_key) +end + +AMQP.Basic.consume(channel, queue_name, nil, no_ack: true) + +IO.puts " [*] Waiting for messages. To exist press CTRL+C, CTRL+C" + + +ReceiveLogsDirect.wait_for_messages(channel)