由于 MQTT 经常用于包含不可靠网络的场景,因此可以合理地假设这些场景中的某些 MQTT 客户端偶尔会不正常地断开连接。由于连接丢失、电池电量耗尽或许多其他原因,可能会发生不正常的断开连接。了解客户端是正常断开连接(使用 MQTT DISCONNECT消息)还是不正常断开连接(没有断开连接消息),有助于您正确响应。遗嘱信息和遗嘱标示功能为客户提供了一种以适当方式应对非正常断开连接的方法。

最后的遗嘱和遗嘱

在 MQTT 中,您使用遗嘱 (LWT) 功能来通知其他客户端有关不正常断开连接的客户端。每个客户端在连接到代理时都可以指定其遗嘱消息(Last will message)。遗嘱消息是一条普通的 MQTT 消息,带有主题、保留消息标志、QoS 和有效负载。代理存储消息,直到它检测到客户端不正常地断开连接。作为对不正常断开连接的响应,代理将遗嘱消息发送给遗嘱消息主题的所有订阅客户端。如果客户端使用正确的 DISCONNECT 消息优雅地断开连接,则代理会丢弃存储的 LWT 消息。

LWT 帮助您在客户端连接断开时实施各种策略(或至少通知其他客户端有关离线状态)。

如何为客户端指定 LWT 消息?

客户端可以在 CONNECT 消息中指定 LWT 消息,用于启动客户端和代理之间的连接。

要了解有关如何建立客户端和代理之间的连接的更多信息,请参阅

代理何时发送 LWT 消息?

根据MQTT 3.1.1 规范,Broker 必须在以下情况下分发客户端的 LWT:

  • 代理检测到 I/O 错误或网络故障。

  • 客户端无法在定义的 Keep Alive 期限内进行通信。

  • 客户端在关闭网络连接之前不会发送 DISCONNECT 数据包。

  • 由于协议错误,代理关闭了网络连接。

我们将在下一篇文章
中听到更多关于 Keep Alive 时间的信息。

最佳实践 - 什么时候应该使用 LWT?

LWT 是通知其他订阅客户端有关另一个客户端意外丢失连接的好方法。在实际场景中,LWT 通常与保留消息
结合使用,以存储客户端在特定主题上的状态。例如,client1 首先向代理发送一条 CONNECT 消息,其中包含“ Offline ”作为有效负载的 lastWillMessage,lastWillRetain 标志设置为 true,lastWillTopic 设置为client1/status。接下来,客户端向同一主题 ( client1/status ) 发送一条带有有效负载“ Online ”且将保留标志设置为 true 的 PUBLISH 消息。只要 client1 保持连接,新订阅到 client1/status 主题的客户端就会收到“ Online” 保留的消息。如果 client1 意外断开,broker 会发布带有有效负载“ Offline ”的 LWT 消息作为新的保留消息。在 client1 离线时订阅主题的客户端会从代理接收 LWT 保留消息(“ Offline ”)。这种保留消息的模式使其他客户端能够及时了解特定主题的 client1 的当前状态。


这将我们带到了 MQTT Essentials 系列的第九部分的结尾。感谢您加入我们。在本系列的最后一篇文章中,我们将介绍MQTT 心跳机制以及代理如何知道客户端在线或离线。

MQTT 基础--遗嘱信息(Last will)和遗嘱标示(Testament):第 9 部分相关推荐

  1. MQTT基础——Part 1. 认识MQTT

    版权声明:本文为博主chszs的原创文章,未经博主允许不得转载. https://blog.csdn.net/chszs/article/details/51635870 MQTT基础--Part 1 ...

  2. AT指令和MQTT基础

    [百问网]物联网学习笔记5 AT指令 SDK 是 Software Development Kit (软件开发工具包)的缩写. 这是一个覆盖面相当广泛的名词,可以这么说:辅助开发某一类软件的相关文档. ...

  3. 【MQTT基础篇(二)】MQTT基础

    文章目录 MQTT基础 1 MQTT服务端 2 MQTT客户端 3 MQTT主题 4 MQTT 发布/订阅 特性 MQTT基础 在MQTT协议通讯中,有两个最为重要的角色.它们分别是服务端和客户端. ...

  4. python模块os测试文件是否存在及基础原信息获取

    python模块os测试文件是否存在及基础原信息获取 在自动化测试中,经常需要查找操作文件,比如说查找配置文件(从而读取配置文件的信息),查找测试报告(从而发送测试报告邮件),经常要对大量文件和大量路 ...

  5. Python制作基础学生信息管理系统

    本文详细讲解了Python制作基础学生信息管理系统的实现,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧.编程资料领取 目录 一.前言 二.开发环境: 三.涉及知 ...

  6. 【自考必看】《信息资源管理基础》信息资源管理基础,第1章,速通指南

    <信息资源管理>第一章基础部分,我们分为 2 篇博客学习 第一章<信息资源管理基础> ⛳️ 信息革命与信息化 人类社会发展的三大要素 信息技术(Information Tech ...

  7. 上海域格ASR平台CAT1模块MQTT和基站信息功能

    上海域格ASR平台CAT1模块MQTT和基站信息获取功能 MQTT透传相关指令和说明 AT+IMQTTADDR=222.66.94.47,1883,client_id0     //设置域名端口 cl ...

  8. pb中建立人员信息表_如何建立基础资料并维护基础资料信息?

    业务数字化平台的搭建主要分为三个部分,基础资料(主数据)模板的搭建,业务模板的搭建和报表模板的搭建. 基础资料是在业务系统中被反复调用的那些数据,包括人员信息,物料信息,仓库信息,部门信息,机台信息, ...

  9. MQTT 基础--Keep Alive和客户接管 - 第 10 部分

    在这篇文章中,我们将讨论 MQTT 的Keep Alive功能以及为什么该功能对移动网络特别重要. TCP连接半开问题 MQTT 基于传输控制协议 (TCP) .该协议确保数据包以"可靠.有 ...

  10. 计算机基础:信息安全相关知识笔记

    1.信息安全要素 机密性:保证信息不暴露给未授权的用户. 完整性:得到允许的用户可以修改数据,并且可以判断数据是否被篡改. 可用性:拥有授权的用户可以在需要时访问数据. 可控性:可控制授权的范围内的信 ...

最新文章

  1. java多线程中的join方法详解
  2. Java设计模式之结构型:适配器模式
  3. java修改pdf内容流_java – 在PDFBox中,如何更改PDRectangle对象的原点(0,0)?
  4. windowsXP/7下消除快捷键箭头的方法
  5. 你跟大神程序员的差距,就在这8本内功心法
  6. VS2013的boost.python编译
  7. vue 图形化设计工具_Vue: Vue-CLI3.0 创建项目
  8. Android 编码规范:(七)避免使用终结方法
  9. Hibernate--关系映射和关联关系的CRUD
  10. icesat2:strong beam and weak beam
  11. PHPMailer的使用
  12. 2020年中国河蟹养殖产业市场现状分析,江苏省育苗量、产量与捕捞量全国第一「图」
  13. 树莓派网络摄像头远程监控
  14. 管理培训决定企业生死的5个层面
  15. 数据科学风云之互联网金融
  16. java合并果子_合并果子(经典优先队列)
  17. js隐藏显示div页面方法
  18. 全球与中国智能灯市场深度研究分析报告
  19. CSGO控制台与常用指令
  20. mac 批量文件编码格式转换

热门文章

  1. 自注意力机制(Self-Attention)
  2. 桥接路由器总是掉线_tplink路由器桥接掉线怎么办
  3. 停车、投票、领证,区块链如何在「智慧城市」建设中大显身手?
  4. 英语二 - 常用词根二
  5. 解决win10计算机管理中没有本地用户和组
  6. bootstrap-selectpicker
  7. 再见,2017,你好,2018
  8. 在图片上加滚动文字html,如何让文字在图片上滚动
  9. 个人网站添加百度统计
  10. java deprecated 注释_@Deprecated注解的使用