rabbitmq - 如何为RabbitMQ启用服务器端心跳?

标签 rabbitmq stomp

我在 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

我尝试将心跳参数添加到 rabbitmq.config,但这似乎不起作用。该文档没有提到心跳参数是用于客户端还是服务器心跳。
[
       {rabbit, [
                {cluster_nodes, {['rabbit@server'], disc}},
                 {cluster_partition_handling, autoheal},
         {heartbeat, 1}
        ]},

最佳答案

心跳参数在客户端实现。 RabbitMQ 会响应客户端发出的心跳。服务端可以要求客户端每隔一定的时间间隔发送一次心跳,但客户端不必跟随。 AMQP Reference ; RabbitMQ reference

关于rabbitmq - 如何为RabbitMQ启用服务器端心跳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21020945/

相关文章:

rabbitmq - RabbitMQ 是否保证已发布消息确认传送回客户端的顺序?

mysql - 在长时间运行的后台脚本中处理原则 2 连接

websocket - stompjs + rabbitmq - 创建自动删除队列

java - StompBrokerRelayMessageHandler - 许多日志错误

spring - 使用 RabbitMQ stomp 适配器跨不同服务器中的订阅中继消息

reactjs - React Native 中的 Stomp 和 SockJs

python - 如何在AMQP的python客户端中使用listen on basic.return

java - SimpleMessageListenerContainer 批量消息处理

Java Spring STOMP MessageMapping 未被调用