我正在尝试设置一个基于Spring的Java应用程序,该应用程序使用本地安装的RabbitMQ服务器在节点之间传递消息 . 正如你们中的一些人所知,rabbitmq.config文件可用于配置各种参数,并由运行Rabbit服务器的底层Erlang节点加载 .
我的问题是我要求某些配置需要 static ,有些需要 dynamic ,具体来说,我需要能够在用户交互的结果中不时重新配置在Rabbit服务器上运行的铲子(即我需要以编程方式修改配置文件并重启兔子服务器以使其生效),但是,我每次都要重写静态配置(特别是因为我不希望java代码读取它) .
我认为我有一个阅读Erlang配置文件手册(http://www.erlang.org/doc/man/config.html)的解决方案,该手册解释了如何使用一个指向另一个的配置文件,以便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">>}
]}
].
我试图在路径中使用单反斜杠或位串,但似乎并不重要 .
在cmd中运行服务器的输出是:
{"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")
任何类型的解决方案或协助将不胜感激,
谢谢 .
1 回答
您链接的config documentation指的是 embedded mode 中的
sys.config
文件 .我怀疑你是在嵌入式模式下运行RabbitMQ并从问题判断,你不是在编辑
sys.config
文件 . 您可能正在编辑RabbitMQ的默认配置文件,并使用默认脚本启动服务器(因此在 interactive mode 中运行erlang) .相反,你真正想要的是 pass specific configuration values 到一个应用程序 . 解决方案位于您链接的同一页面上方:
所以你可以简单地在命令行上传递给erl:
-config
参数-config second_file
带有
-App Par Val
语法的-rabbit default_user '<<"guest">>' -rabbit default_pass '<<"guest">>'
我猜你必须使用
RABBITMQ_SERVER_START_ARGS
环境变量,或编辑rabbitmq-server.bat脚本或Java代码用来启动RabbitMQ的任何内容 .