缺少客户端的心跳,超时:30秒-RabbitMQ

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了缺少客户端的心跳,超时:30秒-RabbitMQ相关的知识,希望对你有一定的参考价值。

我正在为发布/订阅使用rabbitmq。我有两个微服务,它们通过rabbitmq交换相互通信。微服务1发布一些数据,微服务2使用它。发布和订阅的速度非常低,每天大约100次。 rabbitmq随机抛出“客户端缺少的心跳,超时:30s”。这就是为什么我的应用程序错误显示为“ queue shutdown”的原因。每当我重新启动队列时,服务便可以使用它并开始工作。

我正在将docker和node用于微服务。和https://www.npmjs.com/package/rabbot npm软件包用于rabbitmq实施。

这是我的rabbitmq config

{
  "connection": {
    "server": [
      "rabbitmq"
    ],
    "port": 5672,
    "vhost": "%2f",
    "timeout": 4000,
    "waitMin": 10000,
    "waitIncrement": 3000
  },
  "exchanges": [
    {
      "name": "save-customer",
      "type": "topic",
      "persistent": true,
      "autoDelete": true
    },
    {
      "name": "poison-ex",
      "type": "direct",
      "persistent": true,
      "durable": true,
      "autoDelete": true
    }
  ],
  "queues": [
    {
      "name": "save-customer-q",
      "autoDelete": true,
      "subscribe": true,
      "deadLetter": "poison-ex"
    },
    {
      "name": "poison-q",
      "noAck": false,
      "autoDelete": false,
      "durable": true,
      "poison": true
    }
  ],
  "bindings": [
    {
      "exchange": "save-customer",
      "target": "save-customer-q",
      "keys": [
        "send-customer-data"
      ]
    },
    {
      "exchange": "poison-ex",
      "target": "poison-q",
      "keys": []
    }
  ]
}

这是rabbitmq服务器的日志

root@ALIPL5126:/opt/hos-customer-service# docker logs opt_rabbitmq_1
2018-05-31 07:09:25.438 [warning] <0.26747.0> closing AMQP connection <0.26747.0> (192.168.16.5:45180 -> 192.168.16.2:5672):
missed heartbeats from client, timeout: 30s
答案

根据config docstheir heartbeats article,您可以尝试两种选择:

  1. 禁用心跳,但不建议这样做(强烈建议)>(c),但肯定可以使用。增加配置中的默认心跳时间,例如为3600(以秒为单位,等于1小时)

以上是关于缺少客户端的心跳,超时:30秒-RabbitMQ的主要内容,如果未能解决你的问题,请参考以下文章

rabbitmq日志异常处理

一个简易的心跳包 C# Socket (下)

PHP:保持与 XMPP 聊天客户端的持久连接

慢网络中的大RabbitMQ消息

RabbitMQ 内存和磁盘警告

RabbitMQ 内存和磁盘警告