Rabbit MQ의 ConnectionFactory를 아래처럼 연결의 각 프로퍼티를 지정해주고,


 ConnectionFactory factory = new ConnectionFactory();

 factory.setUsername("test");

 factory.setPassword("password");

 factory.setVirtualHost("vhost");

 factory.setHost("localhost");

 factory.setPort(5672);


새로운 커넥션을 생성하면 아래 메시지와 함께 예외가 발생한다.

ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.


검색해보니 3.3.1 버전부터 guest 계정으로 루프백 주소 이외에는 연결할 수 없도록 바뀌었다고 하는데, guest 계정을 사용한 것도 아니고, 다른 호스트도 아닌데 인증에 실패했다.


조금 방법을 바꿔서 각 프로퍼티를 세터로 설정하는 대신 factory.setUri()메서드를 이용해 연결 설정을 하고 새로운 커넥션을 생성하면 정상적으로 연결된다. 아래와 같은 모습이다.

String urlEncodedPassword = URLEncoder.encode("test", "UTF-8");

factory.setUri("amqp://test:" + urlEncodedPassword + "@localhost:5672/vhost");


빠진 연결 정보가 없는데도(굳이 따지자면 amqp 스키마 정도..?) URI를 통해서는 연결이 되고, 프로퍼티를 설정해주었을 때는 연결이 되지 않는다.


이유를 알 수 없어서 ConnectionFactory의 setUri() 메서드의 소스코드를 봐도, 명확한 이유는 알 수 없었다.


Uri 객체로부터 host, port, username, password, virtualhost를 가져와서 동일하게 세터를 호출하여 값을 설정한다.


문제가 고쳐지긴 했지만 찝찝하다. 뭘 잘못하고 있는걸까



----- 추가

연결이 되지 않은 이유는... 패스워드에 오타가 있었습니다. 하하;;

3.3.1 버전부터 guest 계정으로는 localhost만 접속할 수 있다고 합니다. 링크를 참고하세요. http://www.rabbitmq.com/access-control.html#loopback-users


+ Recent posts