消息中間件MQTT

1.1概念

MQTT(MQ Telemetry Transport) 消息隊列遙測傳輸協議是IBM開發的一種網絡應用層的協議,提供輕量級的,支持可發佈/可訂閱的的消息推送模式,使設備對設備之間的短消息通訊變得簡單,好比如今應用普遍的低功耗傳感器,手機、嵌入式計算機、微型控制器,衛星等移動設備。html

1.2優勢

1.2.1很是低的通訊開銷

MQTT 的獨特之處在於,它的每消息標題能夠短至 2 個byte。MQ 和 HTTP 都擁有高得多的每消息開銷。對於 HTTP,爲每一個新請求消息從新創建 HTTP 鏈接會致使重大的開銷。MQ 和 MQTT 所使用的永久鏈接顯著減小了這一開銷。編程

1.2.2低功耗,省電

您須要可以及時地將通知傳遞給客戶。爲此,必須採用某種按期輪詢或推送方法;從電池、系統負載和帶寬角度講,推送是最佳解決方案。MQTT 是專門針對低功耗目標而設計的。HTTP 的設計沒有考慮此因素,所以增長了功耗。安全

1.2.3單機百萬級併發

在 HTTP 堆棧上,維護數百萬個併發鏈接,須要作許多的工做來提供支持。儘管能夠實現此支持,但大多數商業產品都爲處理這一數量級的永久鏈接而進行了優化。IBM 提供了 IBM MessageSight,這是一個單機架裝載服務器,通過測試能處理多達 100 萬個經過 MQTT 併發鏈接的設備。相反,MQ 不是爲大量併發客戶端而設計的。服務器

1.2.4對網絡環境的容忍度

MQTT提供三種不一樣消息傳遞等級,讓消息能按需到達目的地,適應在不穩定工做的網絡傳輸需求。MQTT 和 MQ 可以從斷開等故障中恢復,並且沒有進一步的代碼需求。可是,HTTP 沒法原生地實現此目的,須要客戶端重試編碼,這可能增長冪等性問題。網絡

1.2.5客戶端多平臺支持

支持各類流行編程語言(包括C,Java,Ruby,Python 等等)且易於使用的客戶端。併發

1.2.6發佈/訂閱模式,開發簡易

支持發佈 / 訂閱模型,簡化應用程序的開發。編程語言

1.2.7推送通知

企業可能須要在沒有第三方中介的狀況下發送敏感的信息。這下降了特定於操做系統的解決方案(好比 Apple iOS、Google Play 通知)做爲主要傳輸機制的價值。測試

HTTP 只容許使用一種稱爲COMET 的方法,使用持久的 HTTP 請求來執行推送。從客戶端和服務器的角度講,此方法都很昂貴。MQ 和 MQTT 都支持推送,這是它們的一個基本特性。大數據

1.2.8防火牆容錯

一些企業防火牆將出站鏈接限制到一些已定義的端口。這些端口一般被限制爲 HTTP(80 端口)、HTTPS(443 端口)等。HTTP 顯然能夠在這些狀況下運行。MQTT 可封裝在一個 WebSockets 鏈接中,顯示爲一個 HTTP 升級請求,從而容許在這些狀況下運行。MQ 不容許採用這種模式。優化

 

1.3缺點

因爲MQTT自己的各項技術優點,愈來愈多的企業傾向於選用MQTT做爲物聯網產品通信的標準協議,也所以,工程師們漸漸發現MQTT協議要想大規模商用,也有一些有待完善的功能。好比:

1.3.1沒有齊備的SDK

不一樣的異構終端,須要有對應的與MQTT服務器通訊的軟件SDK包,好比MCU、Linux、Android、IOS、WEB等之間要實現互聯互通必然須要不一樣的SDK包。

1.3.2不支持File和AV

有些應用場景,須要傳輸的信息可能不只僅限於指令,好比聲音信號和視頻信號,這些須要經過File和AV來實現通訊。

1.3.3不支持與第三方的HTTP集成

雖然MQTT協議優於普通的HTTP協議,可是基於傳統的HTTP協議的WEB服務器仍然佔主流市場,那麼這些服務器要實現與MQTT協議的互聯互通,以下降升級成本也尤其關鍵。

1.3.4不支持用戶管理接口

用戶在進行設備的行爲數據分析的時候,顯得尤其重要,這又是工業4.0、大數據時代的必然需求。

1.3.5原生不支持離線

消息彌補設備離線之後,MQTT服務器對設備的控制信息丟失的問題。

(解決方案:https://helpcdn.aliyun.com/document_detail/59914.html)

1.3.6不支持點對點通訊

採用標準的MQTT協議,理論上能夠經過相互訂閱的方式實現點對點通訊,可是邏輯相對複雜,而且對設備的安全性方面存在擔心。當設備B和設備C在同一主題的狀況下,設備A沒法知道是設備B仍是設備C發送的消息,也有可能消息被設備D竊聽。

1.3.7不支持羣通訊和羣管理

實現了對羣組成員的管理,羣組成員之間能互通消息,這在一個設備被多人控制,或者多個設備被一人控制的這種場景下,尤其有用。

 

1.4實現

1.4.1 交互圖

 

怎麼樣,是否是一目瞭然,很是簡單

 

資料參考自:http://www.javashuo.com/article/p-nxzjtftc-ht.html

相關文章
相關標籤/搜索