Как использовать несколько файлов конфигурации для RabbitMQ / Erlang
Я пытаюсь настроить приложение на основе Spring, которое использует локально установленный сервер RabbitMQ для доставки сообщений между узлами. Как некоторые из вас уже знают, файл rabbitmq.config может использоваться для настройки различных параметров и загружается базовым узлом Erlang, на котором работает сервер Rabbit.
Моя проблема в том, что у меня есть требование, что некоторые конфигурации должны быть статическими, а некоторые - динамическими, в частности, мне нужно время от времени переконфигурировать экскаваторы, работающие на сервере Rabbit, в результате взаимодействия с пользователем (т.е. мне нужно изменить программный файл конфигурации программно и перезагрузить кролик-сервер, чтобы он вступил в силу), но я не хочу каждый раз переписывать статическую конфигурацию (особенно потому, что я не хочу, чтобы код java прочитайте это).
Я думал, что у меня есть решение, прочитав руководство по файлу конфигурации Erlang ( http://www.erlang.org/doc/man/config.html), в котором объясняется, как использовать один файл конфигурации, который указывает на другой, так что конфигурация обоих файлы будут объединены Erlang. К сожалению, это, похоже, не работает вообще, и я не смог найти ссылки на эту проблему в Интернете.
Я тестирую это на Windows 7 x64 OS, используя RabbitMQ 3.1.3 и Erlang 5.10 / OTP R16.
1-й конфигурационный файл:
[
{'rabbit', [
{'tcp_listeners', [
5672
]},
{'default_vhost', <<"/">>}
]}, "C:\\Users\\itay\\Desktop\\RabbitMQ\\rabbitmq2.config"
].
2-й конфигурационный файл:
[
{'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 ответ
Конфигурационная документация, на которую вы ссылаетесь, относится к 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
параметр, указывающий на второй файл-config second_file
значения с
-App Par Val
синтаксис (и Par, и Val интерпретируются как термины, добавляйте кавычки)-rabbit default_user '<<"guest">>' -rabbit default_pass '<<"guest">>'
Я думаю, вам придется использовать RABBITMQ_SERVER_START_ARGS
Переменная окружения, или отредактируйте скрипт rabbitmq-server.bat или любой другой код Java, используемый для запуска RabbitMQ.