4

ノード間でメッセージを配信するためにローカルにインストールされた RabbitMQ サーバーを使用する Spring ベースの Java アプリケーションをセットアップしようとしています。すでにご存じの方もいらっしゃると思いますが、rabbitmq.config ファイルを使用してさまざまなパラメーターを構成でき、Rabbit サーバーが実行される基礎となる Erlang ノードによってロードされます。

私の問題は、構成の一部を静的にする必要があり、一部を動的にする必要があるという要件があることです。具体的には、ユーザーの操作の結果として、Rabbit サーバーで実行されているシャベルを時々再構成できるようにする必要があります。 (つまり、構成ファイルをプログラムで変更し、ウサギのサーバーを再起動して有効にする必要があります)。それを読んで)。

Erlang 構成ファイルのマニュアル ( http://www.erlang.org/doc/man/config.html ) を読んで解決策があると思いました。ファイルは Erlang によってマージされます。残念ながら、まったく機能していないようで、オンラインでこの問題への言及を見つけることができませんでした。

RabbitMQ 3.1.3 と Erlang 5.10/OTP R16 を使用して Windows 7 x64 OS でこれをテストしています。

最初の設定ファイル:

[
{'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")

あらゆる種類の解決策または支援をいただければ幸いです。

ありがとう。

4

1 に答える 1

2

リンク先の構成ドキュメントは、組み込みモードsys.configのファイルを参照しています。

Erlang を組み込みモードで起動する場合、sys.config という名前のシステム構成ファイルが 1 つだけ使用されると想定されます。このファイルは $ROOT/releases/Vsn にある必要があります。ここで、$ROOT は Erlang/OTP ルート インストール ディレクトリで、Vsn はリリース バージョンです。

組み込みモードで RabbitMQ を実行しているとは思えず、質問から判断すると、sys.configファイルを編集していません。おそらく、RabbitMQ のデフォルトの構成ファイルを編集し、デフォルトのスクリプトを使用してサーバーを起動しています (したがって、対話モードで erlang を実行しています)。

代わりに、実際に必要なのは、特定の構成値をアプリケーションに渡すことです。解決策は、上記のリンクしている同じページにあります。

構成ファイルには、システム内のアプリケーションの構成パラメーターの値が含まれています。erl コマンド ライン引数 -config Name は、システム構成ファイル Name.config 内のデータを使用するようにシステムに指示します。

構成ファイルの構成パラメーター値は、アプリケーション リソース ファイルの値を上書きします (app(4) を参照)。構成ファイルの値は、コマンド ライン フラグで上書きできます (erl(1) を参照)。

したがって、コマンド ラインで次のいずれかを erl に渡すだけです。

  • -config2 番目のファイルを指す追加のパラメーター

    -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 を開始するために使用するものを編集する必要があると思います。

于 2013-08-08T13:29:13.103 に答える