本文介紹物聯網平台支援的MQTT 5.0新特性的訂閱選項。
功能說明
裝置訂閱時通過設定訂閱選項可以改變物聯網平台的行為,MQTT 5.0支援的訂閱選項如下:
特性 | 說明 |
MQTTMessage Service品質等級,與MQTT 3.1相同。 | |
裝置是否接收自己發布的訊息。 | |
物聯網平台向裝置發布訊息時是否保留其中的Retain標識。 | |
指定訂閱建立時服務端是否向裝置發送保留訊息。 |
使用C LinkSDK接入時,訂閱選項預設值都為0。
No Local選項建議設定為1,可以減少不必要的訊息傳輸。
QoS level
訊息品質分三個等級:
等級 | 說明 | 常見情境 |
QoS 0 | 訊息最多收到一次,訊息不可靠傳輸,訊息可能丟失。 | 感應器資料轉送使用該等級。 |
QoS 1 | 訊息最少收到一次,訊息可靠傳輸,訊息必達。 | 遠端控制指令。 |
QoS 2 | 訊息僅收到一次。 說明 物聯網平台暫不支援。 | 無。 |
No Local
對於MQTT 3.1.1版本協議,如果裝置訂閱了自己發布訊息的Topic,則裝置會接收到自己發布的訊息。而使用MQTT 5.0版本協議,此情境下,裝置在訂閱Topic時,可以設定此選項為1,裝置將不會接收到自己發布的訊息。
可取值:
1:不接收。
0:接收。
裝置通配訂閱時,使用該特性,既簡化訂閱動作,又可以避免收到無意義的訊息。如下圖所示:
Retain As Publish
物聯網平台向裝置端轉寄訊息時,可指定是否需要保留訊息中的Retain標識。
配置方法,訂閱Topic時設定Retain As Publish:
1:物聯網平台轉寄普通訊息時,保留Retain標識;代理髮送保留訊息時,保留Retain標識。
0:物聯網平台轉寄普通訊息時,不保留Retain標識;代理髮送保留訊息時,保留Retain標識。
如下表所示,發行者發布訊息中Retain標識可為:
True:發布訊息中有Retain標識,根據Retain As Publish設定,決定裝置收到訊息中是否保留該標識。
False:發布訊息中沒有Retain標識,Retain As Publish設定無效,訊息中都不會保留該標識。
發行者發布訊息中Retain | 發布時訂閱狀態 | 訂閱選項(Retain As Publish) | 裝置收到的訊息中Retain |
True | 已訂閱(立即轉寄訊息) | 1 | True |
0 | False | ||
無訂閱(訂閱後,發布保留訊息) | 1 | True | |
0 | True | ||
False | 任意狀態 | 任意值 | False |
由上可知,裝置訂閱收到的訊息中Retain標識有兩層含義:
發行者發布訊息時,是否有Retain標識,通過將Retain As Publish設定為1實現。
訊息是否為保留訊息,由物聯網平台保留代理髮布的,通過將Retain As Publish設定為0實現。
Retain Handling
該特性用來指定訂閱建立時服務端是否向裝置發送保留訊息。
取值:
0:只要裝置訂閱成功,服務端就發送保留訊息。
1:裝置訂閱成功且該訂閱之前不存在,服務端才發送保留訊息。同一個會話,重複訂閱的情境將不再收到保留訊息。
2:即使裝置訂閱成功,服務端也不會發送保留訊息。