Add Elixir source for tutorial 4

This commit is contained in:
Jeff Weiss 2015-12-22 00:38:08 -08:00
parent f4fdd41df7
commit 11d1065326
No known key found for this signature in database
GPG Key ID: 863E21C5E735FBB2
2 changed files with 63 additions and 0 deletions

View File

@ -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)

View File

@ -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)