订阅选项
本文介绍云消息队列 MQTT 版支持的MQTT 5.0新特性的订阅选项。
功能介绍
MQTT 5.0 引入了订阅选项(Subscription Options),这为客户端订阅主题时提供了更多的灵活性和控制能力。订阅选项能够指定消息的最大服务质量(QoS)以及设备是否接收自己发布的消息,这些选项使得客户端可以更精细地管理自己的消息流和接收行为。
MQTT 5.0支持的订阅选项如下:
特性 | 说明 |
MQTT消息服务质量等级。 | |
设备是否接收自己发布的消息。 |
QoS level
消息质量分三个等级:
等级 | 说明 | 常见场景 |
QoS 0 | 消息最多收到一次,消息不可靠传输,消息可能丢失。 | 传感器数据传输使用该等级。 |
QoS 1 | 消息最少收到一次,消息可靠传输,消息必达。 | 远程控制指令。 |
QoS 2 | 消息仅收到一次。 | 无。 |
No Local
对于MQTT 3.1.1版本协议,如果设备订阅了自己发布消息的Topic,则设备会接收到自己发布的消息。而使用MQTT 5.0版本协议,此场景下,设备在订阅Topic时,可以设置此选项为1,设备将不会接收到自己发布的消息。
可取值:
1:不接收。
0:接收。
应用场景
服务质量保证:客户端能够定义不同主题的服务质量等级,确保消息按照特定的要求来交付。
消息路由优化:通过指定不同的订阅选项,可以优化消息的路由和调度,特别是在大型分布式系统中。
资源优化:对于有限的带宽或计算资源的客户端,可以通过调整订阅选项来减少不必要的消息接收。
消息示例
假设一个应用场景,其中一个客户端希望接收特定主题的更新,但希望避免接收过去的状态和高于其能够处理的QoS等级的消息。
在这种场合,客户端可以通过设置SUBSCRIBE报文中的订阅选项来请求仅接收QoS 0级别的消息。如下所示:
SUBSCRIBE
Topic Filter: sensors/temperature
Subscription Options:
QoS: 0
No Local: true
Retain As Published: false
Retain Handling: 0
在这个例子中,订阅选项指定了以下内容:
QoS: 最大服务质量被设置为0,这意味着Broker只会向客户端发送QoS 0级别("最多一次"交付)的消息。
No Local: 如果将此设置为true,那么从同一个连接发布的消息不会发送回该连接,即客户端不会接收自己发布的消息。
通过使用订阅选项,客户端能够更好地根据自己的需求和资源限制来控制订阅主题的行为。这使得MQTT 5.0 更加灵活,能够适配各种不同的应用场景和需求。