本文為您介紹MQTT 5.0的新特性使用者屬性。
功能介紹
使用者屬性(User Properties)是MQTT 5.0協議定義的一種允許使用者在訊息中添加自訂中繼資料的機制。這些屬性以UTF-8的索引值對形式存在,不會影響訊息本身的內容,類似於HTTP的Header。允許使用者根據具體應用情境定製訊息的中繼資料,不僅增加了訊息傳輸的靈活性和適用性,還使得MQTT能夠更加高效地處理複雜的商務邏輯和需求。
使用限制
使用者屬性序列化後大小不能超過8K位元組。
序列化後的使用者屬性如下:
[{"key":"mQ","value":"test001"},{"key":"MQ","value":"test002"}]該字串的長度不能超過8K位元組。
僅儲存與轉寄PUBLISH報文中的使用者屬性,即只對發送訊息的使用者屬性進行儲存與轉寄。
使用說明
使用者屬性是一個索引值對列表,鍵可以重複,MQTT服務不會進行去重操作。
每個使用者屬性都是一個索引值對,鍵和值都必須為UTF-8編碼的字串。
應用情境
裝置狀態報表:通過使用者屬性,裝置可以在發送狀態資料時附帶一些標識資訊,例如裝置類型、位置等,從而使得資料接收方在處理資料時可以根據這些屬性採取設定動作。
訊息路由:在分布式系統中,可以根據使用者屬性的不同值來決定訊息的路由,增強系統對訊息的靈活處理能力。
安全和審計:在敏感性資料傳輸中,使用者屬性可以攜帶審計資訊,例如會話ID、使用者標識等,有助於後續的安全審計和追蹤。
MQTT 5.0的使用者屬性功能,使得接收方能夠擷取關於訊息更豐富的上下文資訊,讓資料處理變得更加高效,操作更加有針對性,從而滿足多樣化的應用情境需求。
訊息樣本
例如,現在需要發送一個溫度讀數的訊息,同時附帶裝置所在位置和讀數取得的時間戳記。在這種情況下,您可以建立以下使用者屬性:
鍵:location 值:warehouse-section-a
鍵:timestamp 值:2021-09-15T12:00:00Z
當您的MQTT用戶端構建這條訊息時,除了標準的主題(Topic)和有效載荷(Payload),您還能夠添加上述的使用者屬性。發送到MQTT代理(Broker)的PUBLISH報文內容如下:
Topic: sensors/temperature
Payload: 22.4 // 這是實際的溫度讀數
User Properties:
"location : warehouse-section-a"
"timestamp: 2021-09-15T12:00:00Z"接收此訊息的用戶端就能擷取關於訊息更豐富的上下文資訊,不僅知道溫度讀數,還能瞭解讀數的具體位置和時間,使得資料的處理更為高效和有針對性。