在發布/訂閱消息的MQTT協議中,Topic用于定義消息傳輸的通道和路徑,設備通過Topic將消息發布到物聯網平臺,物聯網平臺將消息發送給訂閱Topic的設備。為方便海量設備基于Topic進行通信,簡化授權操作,物聯網平臺定義了產品Topic類和設備Topic。本文介紹MQTT協議的原理、Topic的概念及分類。
工作原理
在上圖中分為設備、物聯網平臺和業務服務器三端,其中設備和物聯網平臺的通信基于MQTT協議。設備、業務服務器、物聯網平臺的通信過程請參見使用Topic通信。
MQTT(Message Queuing Telemetry Transport)是一種基于發布/訂閱模型的消息傳輸協議,具有低開銷、高拓展、協議簡單、雙向通信等優點,可以利用較少的設備資源和網絡資源實現可靠、高效的長連接,被廣泛應用于物聯網領域。目前物聯網平臺支持5.0、3.1.1和3.1版本MQTT協議,協議規范請參見MQTT協議規范。
MQTT客戶端(Client)和MQTT代理者(Broker)。
MQTT客戶端(Client):本文的客戶端(Client)指接入物聯網平臺的設備。設備和用戶的服務器不直接建立連接,而是通過代理者(Broker)進行通信。
MQTT代理者(Broker):本文的MQTT代理者(Broker)指阿里云物聯網平臺。代理者(Broker)是設備和業務服務器消息通信的中介,解耦了設備和業務服務器,實現了設備和業務服務器之間的異步通信。
MQTT協議消息的組成部分
主題(Topic):使用正斜杠(/)作為分隔符構造字符串,例如
/${productKey}/${deviceName}/user/update
,訂閱該Topic的所有設備都會收到消息。消息內容(Payload):消息的具體內容。
MQTT協議消息的傳輸過程,以業務服務器向設備下發消息為例
設備訂閱相應的主題(Topic)。
服務器發送消息給物聯網平臺。
物聯網平臺接收消息,根據消息的主題(Topic)確定設備并發送消息。
業務服務器收到物聯網平臺的消息,確認消息已成功發送。
MQTT協議的重要參數,更多參數請參見MQTT協議規范。
使用限制
Topic相關、設備接入、連接通信等使用限制,請參見使用限制。
Topic類型
詳細的Topic說明,請參見本文末尾的Topic分類和通信說明。
基礎通信Topic:設備使用物聯網平臺的物模型通信、OTA升級、任務管理等功能,必須使用的Topic。
物模型Topic:物模型是對設備實際功能的抽象,從屬性、服務和事件三個維度,分別描述了該實體是什么、能做什么、能提供什么信息。例如智能風扇的開關狀態是屬性,開關的操作是服務,報警是事件。物模型的概念和使用,請參見什么是物模型。
自定義Topic:如果物模型不能滿足您的業務需求,可以使用自定義Topic,自定義Topic的前三個類目
/ProductKey/${deviceName}/user
已固定。管理和使用自定義Topic的操作,請參見使用自定義Topic通信。
產品Topic類和設備Topic的概念
基礎通信Topic和物模型Topic由物聯網平臺定義,以
/sys
、/ota
或/shadow
開頭。使用物模型Topic通信,需要先在產品下創建物模型。請參見單個添加物模型或批量添加物模型。自定義Topic需要用戶自行創建。產品的自定義Topic類、設備Topic的關系如下圖:
每個產品只有一個
ProductKey
,每個ProductKey
下有多個Topic類,每個Topic類對ProductKey
下所有設備通用。產品Topic類是同一產品下所有設備的相同功能Topic的集合,以
/${productKey}/${deviceName}
開頭。Topic類的功能。
Topic類以正斜線(/)開頭并分隔每個類目,例如:
/${productKey}/${deviceName}/user/update
,${productKey}
和${deviceName}
為固定類目,前綴、后綴類目用于區分不同功能的消息。${productKey}
表示產品的標識符ProductKey。在指定產品的Topic類中,需替換為具體產品的ProductKey
值例如a19mzP****
。${deviceName}
表示設備名稱。在產品Topic類中,${deviceName}
代表該產品下所有設備,不需要替換為實際設備名稱。
Topic類的操作權限。權限的主體是設備,發布權限代表設備向該Topic類下的設備Topic發布消息,訂閱權限代表設備接收物聯網平臺的數據。
服務器接收設備數據,需要設置Topic類的權限為發布。
服務器向設備下發數據,需要設置Topic類的權限為訂閱。
說明定義產品Topic類后,需要設備主動訂閱具有訂閱權限的Topic,相應Topic才會出現在設備詳情頁的Topic列表頁簽。設備訂閱Topic的操作,請參見使用Topic通信。
設備Topic。添加設備后,產品的所有自定義Topic類會自動映射到設備上,生成具體的設備Topic。產品Topic類定義的操作權限,會映射到具體的設備Topic。在產品Topic類基礎上,使用具體的設備名稱例如
device1
替換產品Topic類中的${deviceName}
,得到設備Topic例如:/a19mzP****/device1/user/update
。設備Topic歸屬于對應的設備,可用于消息通信。基于Topic的通信過程請參見使用Topic通信。
定義設備Topic的流程
創建產品后,物聯網平臺為該產品預定義了Topic類,包含基礎通信Topic、物模型通信Topic和自定義Topic。在產品詳情頁面,單擊Topic類列表頁簽,查看各功能及其Topic類。
為產品添加設備。具體操作,請參見創建設備。
創建產品的自定義Topic類。具體操作,請參見使用自定義Topic通信。
Topic分類和通信說明
物聯網平臺預定義的產品Topic類對應的設備Topic包含基礎通信Topic、物模型通信Topic和自定義Topic三種類型,詳細說明見下表。
類型 | Topic類及數據格式 | 說明 |
基礎通信Topic | 設備OTA升級消息的Topic,包括設備上報OTA模塊版本、物聯網平臺推送升級包信息、設備上報升級進度和設備請求獲取最新升級包信息。 | |
上報設備標簽的Topic,上報設備的部分信息,如廠商、設備型號等。 | ||
NTP服務同步請求和響應的Topic,解決嵌入式設備資源受限,系統不包含NTP服務,端上沒有精確時間戳的問題。 | ||
設備影子數據通過Topic進行流轉,包括設備影子發布和設備接收影子變更。 | ||
設備主動請求配置信息和物聯網平臺推送配置信息的Topic。 開發人員可在不用重啟設備或中斷設備運行的情況下,在線遠程更新設備的系統參數、網絡參數等配置信息。 | ||
廣播Topic。調用云端API PubBroadcast向訂閱了該Topic的所有設備發送廣播消息,實現批量控制設備。 | ||
物模型通信Topic | 各物模型功能的Topic。 說明 在物聯網平臺,不可以調用Pub接口向物模型通信Topic發送消息。 在物聯網平臺的云端,通過物模型功能遠程控制設備,請調用SetDeviceProperty或SetDevicesProperty設置設備屬性值;調用InvokeThingService或InvokeThingsService調用設備服務。 | |
自定義Topic | 系統默認提供了3個自定義Topic類。您可根據業務需求,自定義Topic類。 Topic類是一個Topic模板配置,編輯更新某個Topic類后,可能對產品下所有設備使用該類Topic通信產生影響。建議在設備研發階段設計好,設備上線后不再變更Topic類。 |
相關文檔
定義Topic后,設備、物聯網平臺、服務端、其他云產品間的通信方式請參見使用Topic通信。更多通信方式,請參見物聯網平臺通信方式概述。
設備接入、物模型使用的入門視頻,請參見設備接入。
不同協議、不同類型設備接入物聯網平臺的流程,請參見設備接入概述。設備端Link SDK的下載方式,請參見設備接入Link SDK。
物模型Topic數據自動寫入時序數據存儲空間,管理物模型數據存儲的操作請參見關閉或開啟物模型數據存儲。
如果需要存儲自定義Topic數據用于查詢,必須先創建時序數據存儲規則。操作步驟,請參見配置自定義Topic數據存儲。