在發布/訂閱訊息的MQTT協議中,Topic用於定義訊息傳輸的通道和路徑,裝置通過Topic將訊息發布到物聯網平台,物聯網平台將訊息發送給訂閱Topic的裝置。為方便海量裝置基於Topic進行通訊,簡化授權操作,物聯網平台定義了產品Topic類和裝置Topic。本文介紹MQTT協議的原理、Topic的概念及分類。
工作原理
在上圖中分為裝置、物聯網平台和商務服務器三端,其中裝置和物聯網平台的通訊基於MQTT協議。
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類基礎上,使用具體的裝置名稱例如
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 | 裝置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類。 |
相關文檔
更多通訊方式,請參見物聯網平台通訊方式概述。
不同協議、不同類型裝置接入物聯網平台的流程,請參見裝置接入概述。裝置端Link SDK的下載方式,請參見裝置接入Link SDK。
物模型Topic資料自動寫入時序資料存放區空間,管理物模型資料存放區的操作請參見關閉或開啟物模型資料存放區。
如果需要儲存自訂Topic資料用於查詢,必須先建立時序資料存放區規則。操作步驟,請參見配置自訂Topic資料存放區。