首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用CloudAMQP配置Spring

如何使用CloudAMQP配置Spring
EN

Stack Overflow用户
提问于 2014-05-15 01:04:54
回答 1查看 1.4K关注 0票数 1

我有一个Spring应用程序,我正在将它部署到一个Cloud实例(BlueMix)。我已经将一个CloudAMQP实例绑定到应用程序,并希望使用它发送我的STOMP方法。我无法正确地配置我的StompBrokerRelayRegistration类来成功地连接CloudAMP中的RabbitMQ实例。我打过电话了

代码语言:javascript
复制
config.enableStompBrokerRelay("/topic", "/queue");

但这试图连接到本地主机。我想它可能会尝试使用我的org.springframework.amqp.rabbit.connection.ConnectionFactory bean,但我想没有。

然后,我尝试用setRelayHost、setRelayPort、setSystemLogin、setSystemPasscode和setVirtualHost调用VCAP_SERVICES中的信息。执行此操作后,Spring似乎试图连接到RabbitMQ实例,但根据日志,连接立即关闭,

按对等点重置连接

。有人知道我做错了什么吗?

更新

显然我用错了端口。使用端口5672会导致立即关闭连接的行为。如果我使用端口61613,则似乎建立了连接。但是,一旦浏览器试图建立websocket,就会引发以下异常

代码语言:javascript
复制
    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)

在此之上,我看到了这个警告

代码语言:javascript
复制
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.springframework.web.socket.messaging.SubProtocolWebSocketHandler@646eb571]]

有人知道这里出了什么问题吗?

EN

回答 1

Stack Overflow用户

发布于 2014-05-15 13:50:04

弄清楚我错过了什么。除了调用setSystemLogin和setSystemPasscode之外,我还需要在StompBrokerRelayRegistration上调用setClientLogin和setClientPasscode。完成此操作后,我从浏览器到CloudAMQP应用程序的WebSocket连接成功了,Spring能够使用来自CloudAMQP的RabbitMQ实例发送STOMP消息。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23667614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档