我在PhoneGap上使用web-stomp插件+ SockJS / Stomp.js并观察到在某些情况下(可能与网络有关),流量可以在不触发连接错误的情况下停止。为了解决这个问题,我认为我可能会使用心跳,所以我将以下内容添加到我的js:
function Connect() {
console.log('Connecting...');
// Connect
var ws = new SockJS(mq_url);
client = Stomp.over(ws);
client.heartbeat.outgoing = 5000; // if 5000 means client will send heart beat every 5000ms
client.heartbeat.incoming = 5000; // if 0 means client does not want to receive heartbeats from server
client.debug = function (str) {
$("#debug").append(timeStamp() + str + "<br>");
varmessage = str;
};
client.connect(
mq_username, mq_password, on_connect, on_connect_error, mq_vhost);
}
但是,服务器不会发送心跳,因此会引发以下错误:
-> PING
-> PING
did not receive server activity for the last 10017ms
Whoops! Lost connection to undefined
我尝试将心跳param添加到rabbitmq.config,但这似乎不起作用。 doc没有提到heartbeat参数是用于客户端还是服务器心跳。
[
{rabbit, [
{cluster_nodes, {['rabbit@server'], disc}},
{cluster_partition_handling, autoheal},
{heartbeat, 1}
]},
答案 0 :(得分:2)
heartbeat参数在客户端上实现。 RabbitMQ将响应客户端发出的心跳。服务器可以请求客户端以特定间隔发送心跳,但客户端不必遵循。 AMQP Reference; RabbitMQ reference