我一直在关注 Elixir 的 RabbitMQ 工作队列教程(Elixir Work Queues),效果非常好。最重要的是,我现在正在尝试让多个消费者启动并由主管进行监控。
事实证明,最后一部分有点棘手。如果我在 2 个单独的 iex 会话中运行以下代码,两者都会从 RabbitMQ 获取和处理消息。
客户(消费者)
defmodule MT.Client do
require Logger
@host Application.get_env(:mt, :host)
@username Application.get_env(:mt, :username)
@password Application.get_env(:mt, :password)
@channel Application.get_env(:mt, :channel)
def start_link do
MT.Client.connect
end
def connect do
{:ok, connection} = AMQP.Connection.open(host: @host, username: @username, password: @password)
{:ok, channel} = AMQP.Channel.open(connection)
AMQP.Queue.declare(channel, @channel, durable: true)
AMQP.Basic.qos(channel, prefetch_count: 1)
AMQP.Basic.consume(channel, @channel)
Logger.info "[*] Waiting for messages"
MT.Client.loop(channel)
end
def loop(channel) do
receive do
{:basic_deliver, payload, meta} -> …
Run Code Online (Sandbox Code Playgroud)