MQTT—發(fā)布和預訂消息傳遞傳輸協(xié)議
原創(chuàng)【51CTO.com原創(chuàng)稿件】物聯(lián)網(wǎng)生態(tài)體系四大領域對應不同的廠商,分別為設備制造、物聯(lián)網(wǎng)平臺、應用和業(yè)務。IBM憑借Watson強大人工智能入住中國物聯(lián)網(wǎng)領域,IBM Watson物聯(lián)網(wǎng)平臺的落地,將會給中國物聯(lián)網(wǎng)行業(yè)注入新鮮的血液。IBM Watson物聯(lián)網(wǎng)平臺與設備和應用程序的通訊主要依靠MQTT協(xié)議。關于MQTT(Message Queuing Telemetry Transport)要追溯到1999年,由IBM公司Andy Stanford-Clark博士和Arcom公司ArlenNipper博士發(fā)明,2014年,MQTT正式成為推薦的物聯(lián)網(wǎng)傳輸協(xié)議標準。
MQTT 是一種發(fā)布和預訂消息傳遞傳輸協(xié)議,用于在傳感器和移動設備之間高效交換實時數(shù)據(jù)。MQTT 通過 TCP/IP 運行,并且在可以直接對 TCP/IP 編碼時,還可選擇使用庫來處理 MQTT 協(xié)議的詳細信息。提供了范圍非常廣泛的各種 MQTT 客戶機庫。
版本支持
Watson IoT Platform 支持以下 MQTT 消息傳遞協(xié)議版本:
Watson IoT Platform 支持 MQTT 標準允許的任何內容。MQTT 獨立于數(shù)據(jù),因此無法發(fā)送圖像、任何編碼的文本、加密數(shù)據(jù)以及幾乎每種類型的二進制格式數(shù)據(jù)。
應用程序、設備和網(wǎng)關客戶機
在 Watson IoT Platform 中,主要對象類為設備和應用程序。網(wǎng)關是設備的子類。MQTT 客戶機向服務標識其自身的對象類用于在處于連接狀態(tài)時確定客戶機的功能。對象類還確定客戶機認證的機制。
應用程序和設備還可用于不同的 MQTT 主題空間。設備在限定了設備的主題空間中運行,而應用程序對整個組織的主題空間具有完全訪問權。
服務質量級別
MQTT 協(xié)議為客戶機和服務器之間的消息傳遞提供了三種服務質量:“最多一次”、“至少一次”和“恰好一次”。雖然可使用任何服務質量級別發(fā)送事件和命令,但必須仔細考慮哪個合適的服務級別滿足您的需求。服務質量級別 2 選項并不總是優(yōu)于級別 0。
最多一次 (QoS0)
“最多一次”服務質量級別 (QoS0) 是最快的傳輸方式,有時稱為“觸發(fā)并忘記”。消息將最多傳遞一次,或者可能完全不會傳遞。網(wǎng)絡中的傳遞不會得到確認,并且不會存儲消息。如果客戶機斷開連接或者服務器發(fā)生故障,那么消息可能會丟失。
MQTT 協(xié)議不需要服務器將服務質量級別為 0 的發(fā)布內容轉發(fā)到客戶機。如果客戶機在服務器收到發(fā)布內容時斷開連接,根據(jù)服務器實施,可能會廢棄此發(fā)布內容。
提示:以某個時間間隔發(fā)送實時數(shù)據(jù)時,請使用服務質量級別 0。丟失單條消息實際上不會產(chǎn)生很大影響,因為之后很快將發(fā)送包含較新數(shù)據(jù)的另一條消息。在此場景中,使用較高服務質量會帶來額外成本,卻不會獲得任何實際優(yōu)勢。
至少一次 (QoS1)
使用服務質量級別 1 (QoS1),消息會始終至少傳遞一次。如果發(fā)送者收到應答之前消息傳遞失敗,那么一條消息可能會傳遞多次。該消息必須存儲在發(fā)送者本地,直到發(fā)送者收到關于接收者已發(fā)布此消息的確認為止。存儲此消息是為了以防必須再次發(fā)送此消息。
恰好一次 (QoS2)
“恰好一次”服務質量級別 (QoS2) 是最安全也是最慢的傳輸方式。消息始終傳遞恰好一次,并且必須存儲在發(fā)送者本地,直到發(fā)送者收到關于接收者已發(fā)布此消息的確認為止。存儲此消息是為了以防必須再次發(fā)送此消息。使用服務質量級別 2,會采用比級別 1 更復雜的握手和應答序列,以確保消息不會重復。
提示:發(fā)送命令時,如果需要確認將僅執(zhí)行指定命令且僅執(zhí)行一次,請使用服務質量級別 2。此示例說明了級別 2 產(chǎn)生的額外開銷比其他級別更為有利的情況。
預訂緩沖區(qū)和 clean session
將為來自設備或應用程序的每個預訂分配一個可容納 5000 條消息的緩沖區(qū)。使用緩沖區(qū),任何應用程序或設備可滯后于其正在處理的實時數(shù)據(jù),還可為其做出的每個預訂積壓最多 5000 條暫掛消息。緩沖區(qū)已滿時,會在收到新消息時廢棄最舊消息。
使用 MQTT clean session 選項可訪問預訂緩沖區(qū)。當 clean session 設置為 false 時,訂戶會收到來自緩沖區(qū)的消息。當 clean session 設置為 true 時,會重置緩沖區(qū)。
注:無論使用什么服務質量設置,預訂緩沖區(qū)限制都適用。如果應用程序無法與其做出的預訂的消息速率保持同步,以級別 1 或 2 發(fā)送的消息有可能無法傳遞到該應用程序。
消息有效內容限制
Watson IoT Platform 支持發(fā)送和接收 MQTT 標準允許的任何格式的消息。MQTT 獨立于數(shù)據(jù),因此無法發(fā)送圖像、任何編碼的文本、加密數(shù)據(jù)以及幾乎每種類型的二進制格式數(shù)據(jù)。但是,對于特定用例,存在一些限制。
對于 Watson IoT Platform 上的消息有效內容,也存在大小限制。
消息有效內容格式限制
消息有效內容可包含任何有效字符串,但是,JSON(“json”)、文本(“text”)和二進制(“bin”)格式比其他格式類型更常用。
下表概述了不同格式類型的消息有效內容限制:
***消息有效內容大小
重要信息:Watson IoT Platform 上的***有效內容大小為 131072 字節(jié)。將拒絕其有效內容超出限制的消息。正在連接的客戶機也會斷開連接,并且會在診斷日志中顯示一條消息,如以下設備消息示例中所示:
Closed connection from x.x.x.x. The message size is too large for this endpoint.
【51CTO原創(chuàng)稿件,合作站點轉載請注明原文作者和出處為51CTO.com】