2014-05-15 6 views
1

CloudMarker 인스턴스 (BlueMix)에 배포 할 스프링 부트 응용 프로그램이 있습니다. 응용 프로그램에 CloudAMQP 인스턴스를 바인딩하고이를 사용하여 내 STOMP 메시지를 보내고 싶습니다. CloudAMP에서 RabbitMQ 인스턴스를 성공적으로 연결하기 위해 StompBrokerRelayRegistration 클래스를 올바르게 구성 할 수 없었습니다. 나는 불렀다CloudAMQP를 사용하여 스프링 웹 소켓을 구성하는 방법

config.enableStompBrokerRelay("/topic", "/queue"); 

그러나 이것은 localhost에 연결을 시도했다. 내 org.springframework.amqp.rabbit.connection.ConnectionFactory 빈을 사용하려고 시도 할 수도 있다고 생각했지만 그렇지 않은 것 같습니다.

그런 다음 VCAP_SERVICES의 정보로 setRelayHost, setRelayPort, setSystemLogin, setSystemPasscode 및 setVirtualHost를 호출하려고했습니다. 이 봄을 수행 한 후 연결이 즉시 피어

에 의해

연결 다시 말을 폐쇄하는 RabbitMQ 인스턴스에 연결하지만 로그를 기반으로하려고하는 것 같다. 누구든지 내가 뭘 잘못하고 있는지 알 겠어? 업데이트

Aparently 내가 잘못된 포트를 사용했다. 포트 5672를 사용하면 연결이 즉시 닫히는 동작이 발생합니다. 포트 61613을 사용하면 연결이 설정된 것 같습니다. 브라우저가 다음과 같은 예외가이 위

java.lang.IllegalStateException: The WebSocket session has been closed and no method (apart from close()) may be called on a closed session 
2014-05-14T22:17:53.70-0400 [App/0] OUT at org.apache.tomcat.websocket.WsSession.checkState(WsSession.java:649) 
2014-05-14T22:17:53.70-0400 [App/0] OUT at org.apache.tomcat.websocket.WsSession.getUserPrincipal(WsSession.java:578) 
2014-05-14T22:17:53.70-0400 [App/0] OUT at org.springframework.web.socket.adapter.standard.StandardWebSocketSession.getPrincipal(StandardWebSocketSession.java:123) 
2014-05-14T22:17:53.70-0400 [App/0] OUT at org.springframework.web.socket.sockjs.transport.session.WebSocketServerSockJsSession.getPrincipal(WebSocketServerSockJsSession.java:73) 
2014-05-14T22:17:53.70-0400 [App/0] OUT at org.springframework.web.socket.messaging.StompSubProtocolHandler.afterSessionEnded(StompSubProtocolHandler.java:364) 
2014-05-14T22:17:53.70-0400 [App/0] OUT at org.springframework.web.socket.messaging.SubProtocolWebSocketHandler.clearSession(SubProtocolWebSocketHandler.java:352) 
2014-05-14T22:17:53.70-0400 [App/0] OUT at org.springframework.web.socket.messaging.SubProtocolWebSocketHandler.afterConnectionClosed(SubProtocolWebSocketHandler.java:347) 
2014-05-14T22:17:53.70-0400 [App/0] OUT at org.springframework.web.socket.handler.WebSocketHandlerDecorator.afterConnectionClosed(WebSocketHandlerDecorator.java:85) 
2014-05-14T22:17:53.70-0400 [App/0] OUT at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.afterConnectionClosed(LoggingWebSocketHandlerDecorator.java:71) 
2014-05-14T22:17:53.70-0400 [App/0] OUT at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.afterConnectionClosed(ExceptionWebSocketHandlerDecorator.java:89) 
2014-05-14T22:17:53.70-0400 [App/0] OUT at org.springframework.web.socket.sockjs.transport.session.AbstractSockJsSession.close(AbstractSockJsSession.java:289) 
2014-05-14T22:17:53.70-0400 [App/0] OUT at org.springframework.web.socket.handler.WebSocketSessionDecorator.close(WebSocketSessionDecorator.java:158) 
2014-05-14T22:17:53.70-0400 [App/0] OUT at org.springframework.web.socket.messaging.StompSubProtocolHandler.handleMessageToClient(StompSubProtocolHandler.java:287) 
2014-05-14T22:17:53.70-0400 [App/0] OUT at org.springframework.web.socket.messaging.SubProtocolWebSocketHandler.handleMessage(SubProtocolWebSocketHandler.java:306) 
2014-05-14T22:17:53.70-0400 [App/0] OUT at org.springframework.messaging.support.ExecutorSubscribableChannel$1.run(ExecutorSubscribableChannel.java:70) 
2014-05-14T22:17:53.70-0400 [App/0] OUT at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
2014-05-14T22:17:53.70-0400 [App/0] OUT at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
2014-05-14T22:17:53.70-0400 [App/0] OUT at java.lang.Thread.run(Thread.java:745) 

를 throw되는 웹 소켓을 가서 설정을 시도하지만 일단 나는

2014-05-14T22:17:53.69-0400 [App/0] OUT 2014-05-15 02:17:53.698 WARN 31 --- [tboundChannel-1] o.s.w.s.m.SubProtocolWebSocketHandler : Ignoring protocol in WebSocket session after failure to obtain it: java.lang.IllegalStateException: The WebSocket session has been closed and no method (apart from close()) may be called on a closed session 
2014-05-14T22:17:53.70-0400 [App/0] OUT 2014-05-15 02:17:53.709 ERROR 31 --- [tboundChannel-1] w.s.h.ExceptionWebSocketHandlerDecorator : Unhandled error for ExceptionWebSocketHandlerDecorator [delegate=LoggingWebSocketHandlerDecorator [delegate=org.s[email protected]646eb571]] 

은 누구나 잘못 여기에 무슨 일이 일어나고 있는지에 대한 아이디어가이 경고를 참조?

답변

3

나는 실종 된 것을 알아 냈습니다. setSystemLogin 및 setSystemPasscode를 호출하는 것 외에도 StompBrokerRelayRegistration에서 setClientLogin 및 setClientPasscode를 호출해야했습니다. 이렇게하면 브라우저에서 Cloud Foundry의 응용 프로그램으로 WebSocket 연결이 작동하고 Spring은 CloudAMQP의 RabbitMQ 인스턴스를 사용하여 STOMP 메시지를 보낼 수있었습니다.

관련 문제