小编Kri*_*ote的帖子

Elixir 监督多个 RabbitMQ Consumer 工作人员

我一直在关注 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)

elixir erlang-otp rabbitmq erlang-supervisor

5
推荐指数
0
解决办法
1058
查看次数

标签 统计

elixir ×1

erlang-otp ×1

erlang-supervisor ×1

rabbitmq ×1