从 RabbitMQ 官网的 heartbeats 翻译。

简介

网络在很多情况下会失败,有时情况很微妙(比如 丢包率很高)。操作系统检测到 TCP 断开是一个适中的时间(在 Linux 中默认时长是 11 分钟)。AMQP 0-9-1 提供心跳检测功能来确保应用层及时发现中断的连接(或者是完全没有工作的连接)。 心跳检测还能保护连接不会在一段时间内没有活动而被终止。

心跳超时间隔

心跳 timeout 值决定了 TCP 相互连接的最大时间,超过这个时间,该连接将被 RabbitMQ 和 客户端当作不可到达。这个值是在 RabbitMQ 服务器和客户端连接的时候协商的。客户端需要配置请求心跳检测。RabbotMQ 3.0 及以上的版本中,RabbitMQ 默认设置与客户端之间的心跳时长为 60 秒(3.5.5 版本之前的默认值为 580)。

心跳帧每隔 timeout/2 时间会发送一次。连续两次心跳失败后,连接将会当作不可到达。不同客户端对此的表现不同,但是 TCP 连接都会关闭。当客户端检测到 RabbitMQ 服务节点不可到达,它需要重新发起连接。

任何连接数据交换(例如 协议操作、发布消息、消息确认)都会计入有效的心跳。客户端可能也会发送心跳包,在连接中有其他数据交换,但有些只在需要时发送心跳包。

可以设置 timeout 为 0 来禁用心跳检测功能。不推荐这么做。

Java 客户端中开启心跳

为了在 Java 客户端设置心跳 timeout 时间,需要在创建连接之前通过 ConnectionFactory#setRequestedHeartbeat 设置 timeout 值:

ConnectionFactory cf = new ConnectionFactory();

// set the heartbeat timeout to 60 seconds

cf.setRequestedHeartbeat(60);

注意,如果 RabbitMQ 服务器配置了非零的心跳 timeout 时间(以 3.6.x 开头的版本都有默认设置),客户端设置的时间智能小于这个时长,而不能大于这个时长。

.Net 客户端中开启心跳

为了在 .NET 客户端设置心跳 timeout 时间,需要在创建连接之前通过 ConnectionFactory.RequestedHeartbeat 设置 timeout 值:

var cf = new ConnectionFactory();

// set the heartbeat timeout to 60 seconds

cf.RequestedHeartbeat = 60;

低超时间隔和误报

设置心跳 timeout 时长过段会导致误报(正常的客户端连接会被误报为不可到达)。可能会因为瞬间的网络拥堵、短暂的服务器流量控制,或者其他原因。在设置 timeout 值时需要考虑这些因素。

用户和客户端包维护者多年的反馈建议。timeout 值小于 5 秒很可能导致误报,小于等于 1 秒更有可能误报,在 5 到 20 之间是大多数环境适合的值。

STOMP 中的心跳

STOMP 1.2 中支持心跳检测。在 STOMP 协议中,心跳检测的 timeouts 值可以是不对称性的:以就是说,客户端和服务端可以使用不同的 timeouts 值。RabbitMQ STOMP 插件完整支持这个特性。

心跳检测在 STOMP 中是可选的。为了启动它,在连接的时候需要设置 heart-beat 头信息。详情参看 STOMP 规范 。

MQTT 中的心跳(长连接)

MQTT 3.1.1 中支持心跳检测,它使用了一个不同的名称“长连接” 。RabbitMQ MQTT 插件完整支持这个特性。

长连接在 MQTT 中是可选的。为了开启它,在连接的时候需要设置长连接的 keepalive 时间间隔。有关示例,请查看你的 MQTT 客户端文档。

心跳和长连接

TCP 包含一种目的类似心跳检测的机制(长连接),在信息传递协议和 net tick timeout。因为默认设置的不足,TCP 长连接并不适合甚至适得其反在消息传递协议中。然而,通过适当的调整,在应用程序无法启动心跳检测或使用合理 timeout 值时。它可以作为额外的防御机制。详情请参考网络说明。

心跳和 TCP 代理

某些网络工具(HAproxy, AWS ELB)和设备(硬件负载均衡器)可能关闭在一段时间内没有活动的“空闲”连接,大多数时候这是不可取的。

在连接上启动心跳检测后,它会周期的发送网络检测包。因此,它会保护客户端连接不会因为一段时间的空闲,而被代理和负载平衡器关闭连接。

10 到 30 秒的心跳超时时间产生的周期网络流量(大约 5 到 15 秒)能够满足大多数默认设置的代理工具和负载均衡器。

haproxy心跳检测_RabbitMQ 心跳检测(翻译)相关推荐

  1. 基于51单片机的脉搏心率心跳血压体温测量检测仿真(仿真+原理图+源码+论文)

     资料编号:057 本设计利用红外光电传感器产生脉冲信号,经过放大整形后,输入单片机内进行相应的控制,从而测量出一分钟内的脉搏跳动次数,快捷方便.测量范围限可以用按键调节,并进行声音报警,测量结果以数 ...

  2. 系统心跳测试软件,心跳检测app

    心跳检测app,是一款专业的减率监测软件,该软件无需借助健康设备,只要一部智能手机就能完成,而具体的操作方法是,用户只要把手指按在手机背面的摄像头和闪光灯上即可,轻轻的一按即可自动收集你的心率数据,由 ...

  3. mysql心跳检测_心跳检测 · GatewayWorker手册 · 看云

    ## 为什么需要心跳检测? 正常的情况客户端断开连接会向服务端发送一个fin包,服务端收到fin包后得知客户端连接断开,则立刻触发onClose事件回调. 但是有些极端情况如客户端掉电.网络关闭.拔网 ...

  4. 目标检测:R-CNN论文翻译

    摘要: 在本文中,我们提出一个检测算法,R-CNN,在VOC2012中,map到达53.3%.我们主要结合了两个关键的想法,(1)将高容量的卷积神经网络用于自底向上的区域候选框,为了定位及分割对象.( ...

  5. 一种基于计算机视觉的摄像机智能火灾检测方法 (英文论文翻译 )

    英文版论文原文:https://www.sciencedirect.com/science/article/pii/S0957582018314526?via%3Dihub 一种基于计算机视觉的摄像机 ...

  6. 什么是心跳线?心跳线,主要用于主从服务器之间,是连接工作机与备份机的网线

    心跳线,主要用于主从服务器之间,是连接工作机与备份机的网线, 连接工作机与备份机的网线,通过软件的方式监视工作机,备份机一旦发现工作机由于某种原因停止服务,则立即投入使用,以保证网络的畅通和服务的正常 ...

  7. C语言socket重连和心跳,c# socket 心跳 重连

    /// /// 检查一个Socket是否可连接 /// /// /// private bool IsConnected(Socket socket) { if (socket == null || ...

  8. 服务器心跳信号,服务器心跳攻击

    服务器心跳攻击 内容精选 换一换 检测IDE Daemon与Host之间的心跳,用于检测Host侧的服务器是否在运行.以HwHiAiUser用户登录Host侧服务器.执行命令,检测IDE Daemon ...

  9. 华为服务器显示红色的心跳,服务器的心跳线

    服务器的心跳线 内容精选 换一换 检测IDE Daemon与Host之间的心跳,用于检测Host侧的服务器是否在运行.以HwHiAiUser用户登录Host侧服务器.执行命令,检测IDE Daemon ...

最新文章

  1. cc2530期末试卷_ZigBee应用技术答案试题题目及答案,期末考试题库,章节测验答案...
  2. SVN或其他网盘类软件同步图标不显示的异常
  3. LeetCode 1009. 十进制整数的反码(位运算)
  4. sass报 error (Line XX: Invalid GBK character \xE4) 的解决办法
  5. 商城管理系统(前台+后台+管理员+用户+html+jsp)
  6. Git 查看本地分支关联的远程分支 git branch -vv
  7. 【语音分析】基于matlab GUI语音信号线性预测(LPC)分析【含Matlab源码 910期】
  8. php正则判断括号中的,PHP实现正则匹配所有括号中的内容
  9. 原创度检测工具-文章原创度在线检测免费
  10. python计算器算法_Python数学运算入门把Python当作计算器
  11. dns被劫持怎么办,DNS被劫持了有什么解决办法?
  12. java类详解_JAVA 内部类详解
  13. 标准符号代表的意思汇总
  14. 小米路由修改服务器密码,小米路由器3G密码怎么重置? 小米3G路由器修改wifi密码的方法...
  15. 关于通过前端xslx解析excel日期格式数据转化问题以及自定义时间格式YYYY-MM-DD转化
  16. root cause java.lang.LinkageError: loader constraint violation: loader (instanc
  17. 主板是计算机所有部分连接的基础,计算机基础相关知识答案
  18. Pygame实战:利用Python实现智能五子棋,实现之后发现我玩不赢它。
  19. python自学第六天之列表增删改查
  20. 测试---APP测试

热门文章

  1. 华虹USB-KEY for WinCE.NET驱动程序的编写
  2. android 7 评测,[图]iPhone 7/7 Plus性能评测:碾压Android旗舰
  3. 什么时候用GET?什么时候用POST?
  4. Android 调用微信登陆、支付、分享,出现的白屏、黑屏、闪屏问题。
  5. 最新“铁饭碗”排名,公务员排第六,国家烟草第四,医生第二,第一很多人却不知道...
  6. Python实现VRP常见求解算法——差分进化算法(DE)
  7. mysql 怎么反选_MySQL 范式与反范式的选择 | 剑花烟雨江南
  8. Linux的sed命令详解大全
  9. java 指定utf8mb4_spring boot 使用utf8mb4的操作
  10. 【论文阅读】ReaLiSe:Read, Listen, and See: Leveraging Multimodal Information Helps Chinese Spell Checking