我正在开发一个有趣的项目,需要我学习消息队列和websockets。我试图通过websockets将浏览器连接到使用sockjs而不是纯websockets的rabbitmq实例。在兔子上我已经激活了stomp和web_stomp的插件(使用sockjs时需要web_stomp)。
我遇到的问题是,虽然来自浏览器的调用似乎正常工作,因为通过webstomp / stomp连接与Rabbit进行了非常简短的连接,但是在2或3秒后,Rabbit将连接丢弃。
这是由rabbitmq日志确认的:
= INFO REPORT ==== 2016年7月11日:: 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));
}
);
这是Rabbit配置:
[
{rabbitmq_stomp, [{default_user, [{login, "test"},
{passcode, "test"}
]
},
{tcp_listeners, [{"192.168.1.100", 55674}]},
{heartbeat, 0}
]
}
]
我已经在兔子文档上花了一百万次但这感觉就像我忽略的一样简单。
答案 0 :(得分:0)
解决。梳理完日志后,我意识到web_stomp正在侦听端口15674,所以我更改了配置文件以反映这一点。我发誓我曾经在某些方面做出了这一改变,但似乎并没有什么不同。
在发出我的请求之前我做的最后一项更改是关闭心跳。我读过的所有内容都表明sockjs不支持心跳,并且有建议将其关闭而不是使用默认值。除了在配置文件中关闭心跳之外,我还将其添加到浏览器代码中:
client.heartbeat.outgoing=0;
client.heartbeat.incoming=0;