欢迎来到我们的MQTT 5基础知识系列的第5部分。在第4部分中,我们深入探讨了MQTT会话到期和消息到期。我们揭示了这些功能如何增强物联网应用中的消息管理和效率,使MQTT 5更加灵活和高效。在本文中,我们将重点关注MQTT 5的增强客户反馈和负面确认(NACKs)。我们将剖析MQTT 5为代理确认客户而实施的这种方法,研究它们简化开发人员和运维团队工作的潜力,从而使协议更加健壮和高效。
谁需要更多的MQTT客户端反馈?
多年来,MQTT已经成为众多物联网项目的重要组成部分。正如本系列中所指出的,OASIS委员会在制定新的MQTT 5协议标准时充分考虑了实际协议用户的反馈。主要的抱怨之一是明显的不透明性,主要是由于不足的返回代码和有限的通信方式,导致代理无法向客户端传达特定的限制或情况。这个缺陷增加了调试复杂性,特别是在多供应商项目中。
无论是深入研究客户端断开连接的原因,检查为何消息无法到达其指定目标,还是在各个团队中保证MQTT客户端部署的一致性,MQTT 3的用户通常需要通过技术来增强基本协议功能。MQTT 5经过精心设计,旨在更高效、标准化地解决这些挑战,引入了以下功能。
MQTT 5的特定功能集
让我们专注于几个MQTT 5功能,通过代理提供更多透明度并允许中央系统控制。
MQTT 5中连接建立的反馈
使用MQTT 5版本,MQTT代理现在可以在连接建立时向MQTT客户端提供附加反馈。可以向连接确认数据包添加多种不同的属性,告诉客户端代理支持或允许客户端使用的功能。这些功能包括以下MQTT功能:
- 保留消息
- 通配符订阅
- 订阅标识符
- 共享订阅
- 主题别名
- 客户端可以使用的最高服务质量级别
除了通知客户端已启用和已禁用的功能外,CONNACK数据包中的新属性还允许服务器向客户端反馈代理授予的限制。这些限制包括: - 保持活动时间
- 会话到期间隔
- 最大数据包大小
- 客户端可以发送的最大主题别名数
除了支持所有这些限制外,HiveMQ还允许您在服务器端为这些限制配置最大值,并禁用您用例中不需要的MQTT功能。
MQTT 5中更好的原因代码
在以前的版本中,即MQTT版本3.1和3.1.1中,可用原因代码的种类有限,只有五个与不成功操作相关的代码。然而,MQTT 5大幅增强了这个方面,提供了一组扩展的超过20个原因代码,专门用于不成功的情况。
此外,MQTT 5还引入了将原因代码集成到以前的版本中缺少此属性的数据包的可能性。这些数据包包括UNSUBACK、PUBACK、PUBREC、PUBREL、DISCONNECT和PUBCOMP。这一增强进一步增强了协议的透明性和故障排除效率,说明了MQTT 5所取得的进步。
通过MQTT 5引入具体原因字符串增强清晰度
尽管添加了额外的原因代码确实增强了对客户端的反馈质量,但这些代码通常不足以提供具体的上下文。这就是MQTT 5引入“原因字符串”概念的地方,规范中描述为“…为诊断而设计的人类可读字符串…”
原因字符串提供了开发人员和运维团队需要快速确定事件原因的全面上下文。本质上,原因字符串是一种专门设计用于诊断目的的人类可读字符串。这个有价值的工具有助于以原因代码本身无法提供的方式理解事件的细微差别。
但值得注意的是,原因字符串,尽管在开发和诊断中非常有用,但可以在的配置中禁用。这种灵活性适用于可能不希望暴露此类详细信息的情况。
MQTT 5中的服务器发送断开数据包
在MQTT 3.1和3.1.1中,当客户端超过代理定义的限制时,代理会通过突然关闭客户端的连接来作出响应。然而,这种行为不会向客户端直接提供有关连接终止原因的信息,这可能导致混淆和故障排除困难。
相反,MQTT 5通过引入服务器发送的断开数据包大大改进了这个过程。这允许代理在终止连接之前向客户端传递DISCONNECT数据包。每个服务器发送的断开数据包都包含一个原因代码和相应的原因字符串。这两个元素共同为客户端提供了全面的了解为何连接被断开的理由。
这种连接终止的简化方法不仅为客户端增加了清晰度,还大大简化了确定由代理发起的连接关闭背后原因的过程。MQTT 5中的这一显著增强显著提高了代理和客户端之间的通信透明度。
MQTT 5中的否定确认是什么
在MQTT 5中,通过增加否定确认,通信机制得到了很大的改进。现在,多个数据包类型和消息流可以用否定确认消息进行响应,增强了消息基础设施的整体反馈循环。
与MQTT 3不同,MQTT 5中的UNSUBACK数据包包含一个原因代码,告知客户端其UNSUBSCRIBE尝试的状态,提供清晰而有针对性的反馈。列举了几种潜在的失败原因,例如初始订阅不存在或客户端没有取消订阅的授权。
来自发布流的确认数据包,特别是PUBACK、PUBREL、PUBREC和PUBCOMP,也已经增强,可以发送否定确认消息。当服务器无法处理客户端发送的消息时,例如因为客户端没有发布到某个主题的必要授权,增强的确认数据包现在为客户端提供了所有必要的信息以适应和纠正这种情况,减少了联系运营或支持团队以了解问题的需要。这标志着在MQTT 5应用程序内保持高效和流畅的通信方面迈出了重要的一步。
MQTT 5:优化MQTT通信
MQTT代理,例如HiveMQ,允许您为上述限制的最大值设置服务器端最大值配置。这在多供应商项目中特别有用,在这些项目中,代理操作员可能无法直接控制MQTT客户端的设置。
为客户端改进的反馈大大简化了开发和运维团队的诊断过程。
引入的透明性还改善了不同MQTT客户端和代理之间的互操作性。
了解MQTT 5的更多信息
MQTT代理,如HiveMQ,提供了允许服务器端最大值配置的优势,涉及到上述限制的最大值。这个功能在多供应商项目中尤其有价值,其中代理操作员可能无法直接控制MQTT客户端的设置。
值得注意的是,对于客户端的改进反馈大大简化了开发和运维团队的诊断过程。这种增强的反馈机制可以更快地解决问题,防止在MQTT系统中出现潜在的瓶颈。
此外,这些改进引入的透明性提高了不同MQTT客户端和代理之间的互操作性。这个特性对于创建强大而多功能的物联网生态系统至关重要,并进一步强调了MQTT 5在增强通信、调试和整体系统控制方面所取得的进展。