如何为RabbitMQ/Erlang使用多个配置文件

如何为RabbitMQ/Erlang使用多个配置文件,erlang,rabbitmq,rabbitmq-shovel,Erlang,Rabbitmq,Rabbitmq Shovel,我正在尝试设置一个基于Spring的Java应用程序,它使用本地安装的RabbitMQ服务器在节点之间传递消息。正如一些人已经知道的,rabbitmq.config文件可用于配置各种参数,并由运行Rabbit服务器的底层Erlang节点加载 我的问题是,我有一个要求,一些配置需要是静态的,一些需要是动态的,具体来说,我需要能够根据用户交互的结果不时重新配置Rabbit服务器上运行的铲子(即,我需要以编程方式修改配置文件并重新启动rabbit服务器以使其生效),但我不想每次都重写静态配置(特别是因

我正在尝试设置一个基于Spring的Java应用程序,它使用本地安装的RabbitMQ服务器在节点之间传递消息。正如一些人已经知道的,rabbitmq.config文件可用于配置各种参数,并由运行Rabbit服务器的底层Erlang节点加载

我的问题是,我有一个要求,一些配置需要是静态的,一些需要是动态的,具体来说,我需要能够根据用户交互的结果不时重新配置Rabbit服务器上运行的铲子(即,我需要以编程方式修改配置文件并重新启动rabbit服务器以使其生效),但我不想每次都重写静态配置(特别是因为我不想让java代码读取它)

通过阅读Erlang配置文件手册()我认为我有了一个解决方案,该手册解释了如何使用一个指向另一个的配置文件,这样两个文件的配置都将被Erlang合并。不幸的是,它似乎根本不起作用,我在网上找不到有关此问题的任何参考

我正在使用RabbitMQ 3.1.3和Erlang 5.10/OTP R16在Windows 7 x64操作系统上测试这一点

第一个配置文件:

[
{'rabbit', [
    {'tcp_listeners', [
        5672
    ]},
    {'default_vhost', <<"/">>}
]}, "C:\\Users\\itay\\Desktop\\RabbitMQ\\rabbitmq2.config"
].
[
{'rabbit', [
    {'default_user', <<"guest">>},
    {'default_pass', <<"guest">>}
]}
].
任何形式的解决方案或协助都将不胜感激

谢谢。

您链接到的是嵌入式模式下的
sys.config
文件

在嵌入式模式下启动Erlang时,假定只使用一个名为sys.config的系统配置文件。该文件应位于$ROOT/releases/Vsn中,其中$ROOT是Erlang/OTP根安装目录,Vsn是发行版本

我怀疑您是否在嵌入式模式下运行RabbitMQ,从问题判断,您没有编辑
sys.config
文件。您可能正在编辑RabbitMQ的默认配置文件,并使用默认脚本启动服务器(因此在交互模式下运行erlang

相反,您真正想要的是将特定的配置值传递给应用程序。解决方案位于您链接的同一页面上,如上图所示:

配置文件包含系统中应用程序的配置参数值。erl命令行参数-config Name告诉系统使用系统配置文件Name.config中的数据

配置文件中的配置参数值将覆盖应用程序资源文件中的值(请参阅app(4))。配置文件中的值可以由命令行标志覆盖(请参阅erl(1))

因此,您只需在命令行上传递给erl即可:

  • 指向第二个文件的附加
    -config
    参数

    -配置第二个文件

  • <> >值>代码> -APP PAR VAL语法(Par和瓦迩均被解释为术语,添加引号)

    -兔子默认\用户“”-兔子默认\通行证“”


我猜您必须使用
RABBITMQ\u SERVER\u START\u ARGS
环境变量,或者编辑脚本或Java代码用于启动RABBITMQ的任何内容。

好,这样我就知道,当Erlang在嵌入式模式下运行时,它总是查找sys.config,而忽略
-config
选项。因此,可以使用sys.config文件指向另一个将与其合并的文件。在交互模式下,使用
-config
选项,不支持合并。这是正确的描述吗?我已尝试使用第二个配置文件添加另一个
-config
标志,但节点将不会启动-我得到以下输出:
冲突-启动和-confiG选项< /> >似乎只有一个配置文件被支持……这对我来说是不好的,因为只使用<代码> -APP PAR Value/Cord>参数来配置铲子是不实际的。这是一个Windows专用工具,可以在嵌入式模式下启动Erlang。错误消息意味着您在COMM中通过第二配置文件传递“代码> -CONFIG <代码>。和行,其中根本没有
-config
选项,即可能不在正确的位置。您是否修改了脚本或使用了
RABBITMQ_SERVER_START_ARGS
?我使用了START ARGS变量。我还可以看到rabbit使用-config在命令行中设置默认的RABBITMQ.config文件。但是,您的其他建议是Light对我来说效果很好,因为可以使用
-args_file
选项并从包含单个
-rabbit'stevels'
参数的单独文件加载铲子。我甚至可以使用反斜杠字符添加换行符,以使这个长表达式具有可读性。
{"could not start kernel pid",application_controller,"invalid config data: invalid application     name:  \"C:\\Users\\itay\\Desktop\\RabbitMQ\\rabbitmq2.config\""}

Crash dump was written to: erl_crash.dump
could not start kernel pid (application_controller) (invalid config data: invalid application name:  "C:\\Users\\itay\\Desktop\\RabbitMQ\\rabbitmq2.config")