2013-08-08 1 views
2

노드간에 메시지를 전달하기 위해 로컬로 설치된 RabbitMQ 서버를 사용하는 Spring 기반 Java 응용 프로그램을 설치하려고합니다. 여러분 중 일부는 이미 알고 있기 때문에 rabbitmq.config 파일은 다양한 매개 변수를 구성하는 데 사용할 수 있으며 Rabbit 서버가 실행되는 기본 Erlang 노드에 의해로드됩니다.RabbitMQ/Erlang 용 다중 구성 파일 사용 방법

내 문제는 내가 동적는, 특히, 나는 시간의 토끼 서버에서 실행되는 삽을 재구성 할 수 있어야 될 수있는 구성 중 일부는 정적해야하는 요구 사항과 어떤 요구를 가지고있다 (즉, 프로그래밍 방식으로 구성 파일을 수정하고 영향을 미치기 위해 토끼 서버를 재부팅해야합니다.) 그러나 은 매번 정적 구성을 다시 쓰려고합니다. 특히 자바 코드가 그것을 읽고 싶지 않기 때문에).

나는 Erlang 구성 파일 설명서 (http://www.erlang.org/doc/man/config.html)를 읽었을 때 한 가지 구성 파일을 사용하여 두 파일의 구성이 Erlang에 의해 병합된다는 것을 설명하는 해법이 있다고 생각했습니다. 불행히도 전혀 작동하지 않는 것 같아 온라인에서이 문제에 대한 참조를 찾을 수 없습니다.

RabbitMQ 3.1.3 및 Erlang 5.10/OTP R16을 사용하여 Windows 7 x64 OS에서 테스트하고 있습니다.

1 config 파일 :

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

솔루션이나 지원의 어떤 종류를 알 수있을 것이다,

감사합니다.

답변

2

파일이 임베디드 모드입니다.

포함 된 모드에 얼랑을 시작

, 정확히 하나의 시스템 구성 파일이 사용되는 이름 SYS.CONFIG을 가정한다. 이 파일은 $ ROOT/releases/Vsn에 있어야합니다. $ ROOT는 Erlang/OTP 루트 설치 디렉토리이고 Vsn은 릴리스 버전입니다.

RabbitMQ를 임베디드 모드로 실행하고 있으며 질문으로 판단하는 것이 아니라면 sys.config 파일을 편집하지 않는 것입니다. RabbitMQ의 기본 구성 파일을 편집하고 기본 스크립트를 사용하여 서버를 시작한 것입니다 (따라서 대화 형 모드에서 erlang을 실행 중입니다).

대신 실제로 에 특정 구성 값을 전달하면됩니다.솔루션은 위에 링크 된 동일한 페이지에 있습니다.

구성 파일에는 시스템의 응용 프로그램에 대한 구성 매개 변수의 값이 들어 있습니다. erl 명령 줄 인수 -config Name은 시스템에 Name.config 파일의 데이터를 사용하도록 지시합니다.

구성 파일의 구성 매개 변수 값은 응용 프로그램 리소스 파일 (app (4) 참조)의 값보다 우선합니다. 구성 파일의 값은 명령 행 플래그 (erl (1) 참조)로 겹쳐 쓸 수 있습니다.

그래서 당신은 단순히 명령 행에서 ERL에 전달할 수 있습니다 :

  • -App Par Val 구문을 사용하여 두 번째 파일에

    -config second_file

  • 값을 가리키는 추가 -config 매개 변수 (Par와 Val은 둘 다 용어로 해석되며 따옴표를 추가합니다)

-rabbit default_user '<<"guest">>' -rabbit default_pass '<<"guest">>'

0 나는 당신이 당신의 자바 코드는 RabbitMQ를 시작하는 데 사용하는 무엇이든 rabbitmq-server.bat 스크립트 또는 RABBITMQ_SERVER_START_ARGS 환경 변수를 사용하거나 편집해야 할 것 같아요.

+0

Erlang이 ** 임베디드 ** 모드에서 실행될 때마다 항상 sys.config를 찾고'-config' 옵션을 무시합니다. 따라서 sys.config 파일이 병합 될 다른 파일을 가리킬 수있게되었습니다. ** 대화식 ** 모드에서는'-config' 옵션이 사용되며 병합이 지원되지 않습니다. 올바른 설명입니까? – Itay

+0

두 번째 설정 파일과 함께 또 다른'-config' 플래그를 추가하려했으나 노드가 시작되지 않습니다 -이 출력을 봅니다 :'Conflicting -start_erl and -config options' 하나의 설정 파일이 지원되는 것처럼 보입니다 ... '-App ParVal' 인수만을 사용하여 삽을 구성하는 것이 실용적이지 않기 때문에 나에게 좋지 않습니다. – Itay

+0

[start_erl] (http://www.erlang.org/doc/man/start_erl.html)은 ** 임베디드 ** 모드에서 Erlang을 시작하기위한 Windows 관련 도구입니다. 이 오류 메시지는'-config' 옵션이없는 명령 행에서 두 번째 설정 파일과 함께'-config'를 전달하고 있음을 의미합니다. 즉, 아마도 적절한 위치에 없을 것입니다. 스크립트를 수정 했습니까? 아니면'RABBITMQ_SERVER_START_ARGS'를 사용 했습니까? –

관련 문제