2015-08-18 76 views
3

我們使用spring websockets和tomcat 7搭配stomp和sockjs。 我們的日誌裏充滿了這樣的錯誤:StompBrokerRelayMessageHandler - 很多日誌錯誤

[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 

任何想法,爲什麼?我們如何刪除\緩解這一點?

回答

4

對不起,我有點晚了。儘管如此,面臨着相同/相似的問題。我想你正在使用像rabbitmq這樣的消息傳送程序。

ERROR StompBrokerRelayMessageHandler:584 - TCP connection failure in session uwdglayp: Transport failure: Connection reset by peer 

有時它是一個前向失敗,經常連接失敗。

我做了什麼?在將日誌記錄級別更改爲調試後,我發現,Spring應用程序向消息代理髮送了兩條DISCONNECT消息。

在客戶端調用stomp.disconnect()會導致發送DISCONNECT消息(STOMP)並關閉套接字(socketJS)。

StompBrokerRelayMessageHandler通知代理有關DISCONNECT消息,並另外發送DISCONNECT,因爲套接字已被客戶端關閉,均爲異步。 Spring不可能捕獲第二個斷開連接,並且第二個斷開連接將在發生錯誤時發生。

什麼指定STOMP? (DISCONNECT SPEC

客戶端可以從服務器在任何時候通過關閉插座拔掉,但沒有保證之前發送的幀都已經由服務器接收

我的解決辦法: 修改STOMP客戶端,只是關閉套接字不發送斷開消息(客戶端將會關閉套接字)

另一種解決方案: 僅發送斷開消息(春季將關閉套接字)

我將檢查STOMP的其他實現以找到更好的解決方案。