我们在stomp和sockjs上使用带有tomcat 7的spring websocket。
我们的日志充满了这样的错误:
[WEBAPP] 16 Aug 2015 08:11:24 ERROR StompBrokerRelayMessageHandler - Failed to forward DISCONNECT session=7ufvyfvf
[WEBAPP] 16 Aug 2015 08:13:47 ERROR StompBrokerRelayMessageHandler - Failed to forward DISCONNECT session=d017bxnq
有什么想法吗?以及如何删除\减轻这种情况?
最佳答案
抱歉,我来晚了。然而,面临着相同/相似的问题。我猜您正在使用Rabbitmq这样的消息经纪人。
ERROR StompBrokerRelayMessageHandler:584 - TCP connection failure in session uwdglayp: Transport failure: Connection reset by peer
有时是前向失败,通常是连接失败。
我做了什么将日志记录级别更改为调试后,我发现,Spring应用程序将两条DISCONNECT消息发送到messagebroker。
在客户端调用stomp.disconnect()会导致发送DISCONNECT消息(STOMP)并关闭套接字(socketJS)。
StompBrokerRelayMessageHandler通知代理有关DISCONNECT消息的信息,并另外发送DISCONNECT,因为套接字是由客户端关闭的,两者都是异步的。 Spring不可能抓住第二次断开连接,并且第二次断开连接会发生错误。
什么指定了STOMP? (DISCONNECT SPEC)
客户端可以随时通过关闭套接字来与服务器断开连接,但不能保证服务器已接收到先前发送的帧
我的解决方案:
修改STOMP客户端,仅关闭套接字而不发送DISCONNECT消息(客户端将关闭套接字)
另一个解决方案:
仅发送一条DISCONNECT消息(弹簧将关闭插座)
我将检查STOMP的其他实现,以找到更好的解决方案。