Elixir Phoenix RabbitMQ MatchError

时间:2016-09-27 22:06:44

标签: erlang rabbitmq elixir phoenix-framework

我正在创建消息应用,其中应用A需要使用rabbitMQ向应用B发送消息。我正在使用Phoenix开发并在rabbitMQ网站上发现教程如何使用elixir实现rabbitmq,但我不知道如何在我的Phoenix应用程序中使用它。我尝试将我在Rabbit教程网站上找到的代码添加到我的Phoenix page_controller.ex

  defmodule ApplicationA.PageController do
  use ApplicationA.Web, :controller
  use AMQP

  def index(conn, _params) do
    {:ok, connection} = AMQP.Connection.open
    {:ok, channel} = AMQP.Channel.open(connection)

    AMQP.Queue.declare(channel, "hello")

    AMQP.Basic.publish(channel, "", "hello", "Hello World!")
    IO.puts " [x] Sent 'Hello World!'"

    AMQP.Connection.close(connection)

    render conn, "index.html"
  end
end

但我收到此错误

no match of right hand side value: {:error, :econnrefused}
第6行

{:ok, connection} = AMQP.Connection.open

有人帮助我如何以良好的方式做到这一点?

1 个答案:

答案 0 :(得分:1)

您需要为RabbitMQ指定连接设置。

添加config/dev.exs之类的内容:

config :my_app, :rabbitmq,
  host: "${RABBITMQ_HOSTNAME}", 
  port: 5672, 
  username: "${RABBITMQ_UID}", 
  password: "${RABBITMQ_PWD}"

然后加载它们:

rabbit_settings = Application.get_env :my_app, :rabbitmq
{:ok, connection} = AMQP.Connection.open(rabbit_settings)