Skip to content

Commit 11d1065

Browse files
committed
Add Elixir source for tutorial 4
1 parent f4fdd41 commit 11d1065

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed

elixir/emit_log_direct.exs

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{:ok, connection} = AMQP.Connection.open
2+
{:ok, channel} = AMQP.Channel.open(connection)
3+
4+
{severities, raw_message, _} =
5+
System.argv
6+
|> OptionParser.parse(strict: [info: :boolean,
7+
warning: :boolean,
8+
error: :boolean])
9+
|> case do
10+
{[], msg, _} -> {[info: true], msg, []}
11+
other -> other
12+
end
13+
14+
message =
15+
case raw_message do
16+
[] -> "Hello World!"
17+
words -> Enum.join(words, " ")
18+
end
19+
20+
AMQP.Exchange.declare(channel, "direct_logs", :direct)
21+
22+
for {severity, true} <- severities do
23+
severity = severity |> to_string
24+
AMQP.Basic.publish(channel, "direct_logs", severity, message)
25+
IO.puts " [x] Sent '[#{severity}] #{message}'"
26+
end
27+
28+
AMQP.Connection.close(connection)

elixir/receive_logs_direct.exs

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
defmodule ReceiveLogsDirect do
2+
def wait_for_messages(channel) do
3+
receive do
4+
{:basic_deliver, payload, meta} ->
5+
IO.puts " [x] Received [#{meta.routing_key}] #{payload}"
6+
7+
wait_for_messages(channel)
8+
end
9+
end
10+
end
11+
12+
{:ok, connection} = AMQP.Connection.open
13+
{:ok, channel} = AMQP.Channel.open(connection)
14+
15+
{severities, _, _} =
16+
System.argv
17+
|> OptionParser.parse(strict: [info: :boolean,
18+
warning: :boolean,
19+
error: :boolean])
20+
21+
AMQP.Exchange.declare(channel, "direct_logs", :direct)
22+
23+
{:ok, %{queue: queue_name}} = AMQP.Queue.declare(channel, "", exclusive: true)
24+
25+
for {severity, true} <- severities do
26+
binding_key = severity |> to_string
27+
AMQP.Queue.bind(channel, queue_name, "direct_logs", routing_key: binding_key)
28+
end
29+
30+
AMQP.Basic.consume(channel, queue_name, nil, no_ack: true)
31+
32+
IO.puts " [*] Waiting for messages. To exist press CTRL+C, CTRL+C"
33+
34+
35+
ReceiveLogsDirect.wait_for_messages(channel)

0 commit comments

Comments
 (0)