MQTT协议中的“通知级别”通常指其QoS(服务质量,Quality of Service)等级。它定义了消息从发布者到接收者的可靠性保证,而非直观的“优先级”。

MQTT一共定义了三个QoS等级,核心区别如下:

等级 英文标识 保证机制 消息可能丢失 消息可能重复
0 至多一次 即发即弃,无确认 ✅ 是 ❌ 否
1 至少一次 确认与重发机制 ❌ 否 ✅ 是
2 恰好一次 四次握手流程 ❌ 否 ❌ 否

三个等级的具体工作方式和适用场景如下:

📡 QoS 0:至多一次

  • 工作机制:消息发送方将消息发送出去后,不关心对方是否收到,也不进行任何重试。这就像寄出一封平信,不确认对方是否收到。
  • 适用场景:适合数据量较大、对实时性要求高,但允许偶尔丢失少量数据的场景。例如,每分钟上报一次的温湿度传感器数据,偶尔丢一两个数据点影响不大。

🤝 QoS 1:至少一次

  • 工作机制:消息发送后,发送方会等待接收方的确认(PUBACK)。如果在一段时间内没有收到确认,发送方会重发消息,直到收到确认为止。这类似于寄挂号信,确保对方能收到,但对方可能会收到多封相同的信。
  • 适用场景:适用于需要确保消息送达,且能够容忍重复处理的场景。例如,远程控制智能开关的指令,可以接受发送两次“开灯”指令(虽然灯已经是开的),但不能接受指令丢失导致灯没开。

⚙️ QoS 2:恰好一次

  • 工作机制:这是最高级别的可靠性保障,通过四次握手的复杂流程,确保消息既不丢失也不重复。这个机制最可靠,但带来的性能开销和延迟也最大。
  • 适用场景:适用于对消息的准确性和唯一性要求极其严格的场景。例如,金融交易、计费系统或关键的控制命令,消息的重复或丢失都可能导致严重问题。

💡 重要补充:QoS ≠ 优先级

需要明确的是,QoS定义的是可靠性,而不是我们通常理解的“优先级”。

  • 高QoS不等于高优先级:一个QoS 2的消息虽然在传输上更“重”(流程更复杂),但不代表它会被服务器(Broker)优先处理。
  • 真正的消息优先级:MQTT协议本身没有定义消息优先级字段。如果需要实现优先级,通常需要在应用层自行设计(如为不同优先级的消息分配不同的主题,或自定义消息头)。

如果还想了解某个QoS等级的具体交互流程(比如QoS 2的四次握手),或者想深入探讨如何在实际项目中处理消息重复的问题,随时可以告诉我。

文档更新时间: 2026-06-07 02:34   作者:月影工作室
IT运维支持-AIWALY-月影工作室