【问题标题】:How to setup Elixir project to use RabbitMQ via amqp?如何设置 Elixir 项目以通过 amqp 使用 RabbitMQ?
【发布时间】:2017-04-12 23:30:59
【问题描述】:

我想通过 amqp 从我的 elixir phoenix 应用程序中使用 rabbitMQ。我按照official website 上的教程进行操作,但在mix.deps compile 期间仍然出现错误:

include/amqp_gen_consumer_spec.hrl:30: syntax error before: '/'
include/amqp_gen_consumer_spec.hrl:31: syntax error before: '/'
include/amqp_gen_consumer_spec.hrl:32: syntax error before: '/'
include/amqp_gen_consumer_spec.hrl:34: syntax error before: '/'
include/amqp_gen_consumer_spec.hrl:35: syntax error before: '/'
include/amqp_gen_consumer_spec.hrl:36: syntax error before: '/'
include/amqp_gen_consumer_spec.hrl:37: syntax error before: '/'
include/amqp_gen_consumer_spec.hrl:38: syntax error before: '/'
include/amqp_gen_consumer_spec.hrl:39: syntax error before: '/'
include/amqp_gen_consumer_spec.hrl:42: syntax error before: '/'
include/amqp_gen_consumer_spec.hrl:30: syntax error before: '/'
include/amqp_gen_consumer_spec.hrl:31: syntax error before: '/'
include/amqp_gen_consumer_spec.hrl:32: syntax error before: '/'
include/amqp_gen_consumer_spec.hrl:34: syntax error before: '/'
include/amqp_gen_consumer_spec.hrl:35: syntax error before: '/'
include/amqp_gen_consumer_spec.hrl:36: syntax error before: '/'
include/amqp_gen_consumer_spec.hrl:37: syntax error before: '/'
include/amqp_gen_consumer_spec.hrl:38: syntax error before: '/'
include/amqp_gen_consumer_spec.hrl:39: syntax error before: '/'
include/amqp_gen_consumer_spec.hrl:42: syntax error before: '/'
Compiling src/amqp_selective_consumer.erl failed:
ERROR: compile failed while processing /home/bmarkons/soc2016-marko/telegram/deps/amqp_client: rebar_abort
** (Mix) Could not compile dependency :amqp_client, "/usr/bin/rebar compile skip_deps=true deps_dir="/home/bmarkons/soc2016-marko/telegram/_build/dev/lib"" command failed. You can recompile this dependency with "mix deps.compile amqp_client", update it with "mix deps.update amqp_client" or clean it with "mix deps.clean amqp_client"

Terminal screenshot

我在 mix.exs 文件中只添加了 :amqp 和 {:amqp, "~> 0.1.4"}:

def application do
    [mod: {App, []},
     applications: [:phoenix, :phoenix_pubsub, :phoenix_html, :cowboy, :logger, :gettext,
                    :phoenix_ecto, :postgrex, :amqp]]
end

defp deps do
    [{:phoenix, "~> 1.2.0"},
     {:phoenix_pubsub, "~> 1.0"},
     {:phoenix_ecto, "~> 3.0"},
     {:postgrex, ">= 0.0.0"},
     {:phoenix_html, "~> 2.6"},
     {:phoenix_live_reload, "~> 1.0", only: :dev},
     {:gettext, "~> 0.11"},
     {:cowboy, "~> 1.0"},
     {:amqp, "~> 0.1.4"}]
end

我需要做哪些改变,才能让我的 elixir 应用与 rabbitMQ 一起使用?

谢谢

【问题讨论】:

  • 嗯,这很奇怪。您是否尝试过清理依赖项? mix deps.clean --all 然后是 mix deps.getmix deps.compile。另外,您使用的是哪个版本的 Elixir?
  • 我使用的是 Elixir 1.3.1。我也尝试过,但仍然出现错误。
  • Erlang 版本是多少?
  • 运行 erl -eval 'erlang:display(erlang:system_info(otp_release)), halt()。 -noshell 给我 '19'。
  • 非常感谢,我刚刚在 rabbitmq-users google group 上得到了相同的答案。干杯:)

标签: linux rabbitmq phoenix-framework elixir


【解决方案1】:

这是:amqp项目中报告的问题(https://github.com/pma/amqp/issues/28)它无法使用Erlang 19编译。问题在于:amqp_client。存储库中的最后一个版本是固定的,但它还没有以 hex 包的形式存在。

2016 年 8 月 16 日更新:

如果您想在项目中使用 AMQP 和 Erlang 19,只需添加当前的 :amqp_client 依赖项以覆盖 AMQP 附带的依赖项:

def deps do
  [{:amqp_client, git: "https://github.com/jbrisbin/amqp_client.git", override: true},
   {:amqp, "~> 0.1.4"}]
end

对于这个具体的例子,你应该有类似的东西:

defp deps do
  [{:phoenix, "~> 1.2.0"},
   {:phoenix_pubsub, "~> 1.0"},
   {:phoenix_ecto, "~> 3.0"},
   {:postgrex, ">= 0.0.0"},
   {:phoenix_html, "~> 2.6"},
   {:phoenix_live_reload, "~> 1.0", only: :dev},
   {:gettext, "~> 0.11"},
   {:cowboy, "~> 1.0"},
   {:amqp_client, git: "https://github.com/jbrisbin/amqp_client.git", override: true},
   {:amqp, "~> 0.1.4"]
end

重要提示:如果项目的混合文件已经覆盖了依赖项,则应在使用 AMQP 事件的项目中覆盖 :amqp_client 依赖项。

我希望这会有所帮助。

【讨论】:

  • 我最近更新了 erlang 并收到此错误。我按照您的步骤进行了编译。但是,我必须做一个小改动 - 我必须将 {:amqp, github: "/amqp"} 更改为 {:amqp_client, github: "/amqp"}和 :amqp 应用到 :amqp_clients。但是现在它给出了这个错误:模块 AMQP 未加载并且找不到 [在这一行 - 使用 AMQP] 你能告诉我可能是什么原因以及如何解决这个问题?
  • @KshitijMittal 我更新了当前为我工作的解决方法。希望这会有所帮助:)
【解决方案2】:

我必须将依赖项定义如下(分支信息)才能使其运行:

defp deps do
[
  {:amqp_client, git: "https://github.com/dsrosario/amqp_client.git", branch: "erlang_otp_19", override: true},
  {:amqp, "~> 0.1.4"}
]

结束

【讨论】:

    猜你喜欢
    • 2021-08-18
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多