2016-07-12 177 views
0

我正在開發一個有趣的項目,它需要我學習消息隊列和websockets。我試圖通過websockets將瀏覽器連接到使用sockjs而不是純websocket的rabbitmq實例。在兔子我已經激活了stomp和web_stomp插件(使用sockjs時需要web_stomp)。RabbitMQ STOMP連接

我遇到的問題是,雖然來自瀏覽器的呼叫似乎正常工作,因爲通過webstomp/stomp連接與兔子進行非常簡短的連接,但在2或3秒後,連接被兔子。

這由RabbitMQ的日誌證實:

= INFO REPORT ==== 11-JUL-2016 :: 23:01:54 === 接受STOMP連接(192.168.1.10:49746 - > 192.168.1.100:55674)
= INFO REPORT ==== 2016年7月11日:: 23:02:02 === 正在關閉STOMP連接(192.168.1.10:49746 - > 192.168.1.100:55674)

這是通過webstomp插件連接到RabbitMQ的瀏覽器代碼:
var url = "http://192.168.1.100:55674/stomp"; var ws = new SockJS(url); var client = Stomp.over(ws); var header = { login: 'test', passcode: 'test' }; client.connect(header, function(){ console.log('Hooray! Connected'); }, function(error){ console.log('Error connecting to WS via stomp:' + JSON.stringify(error)); } );

這裏是兔子的配置: [ {rabbitmq_stomp, [{default_user, [{login, "test"}, {passcode, "test"} ] }, {tcp_listeners, [{"192.168.1.100", 55674}]}, {heartbeat, 0} ] } ]. 我一直在兔年文檔一百萬次,但這種感覺就像簡單的東西,我俯瞰。

回答

0

已解決。在梳理日誌之後,我意識到web_stomp正在偵聽端口15674,所以我更改了配置文件以反映這一點。我發誓我曾在某個時候做過這種改變,但似乎沒有什麼區別。

在發送我的請求之前,我做出的最近更改之一是關閉心跳。我讀過的一切都表明,sockjs不支持心跳,並且有建議將其關閉,而不是使用默認值。除了關閉配置文件中的心跳信號之外,我還將此添加到瀏覽器代碼中:

client.heartbeat.outgoing=0; 
client.heartbeat.incoming=0;