MQTT 介紹

什么是MQTT

MQTT是Message Queuing Telemetry Transport的縮寫,它是一個基于發(fā)布/訂閱模式的輕量級消息中間件協(xié)議,IBM公司的Andy Stanford-Clark 和Cirrus Link公司的Arlen Nipper在1999年設(shè)計了MQTT協(xié)議,最初用于石油管道的遠(yuǎn)程遙監(jiān)系統(tǒng)。2010年MQTT發(fā)布免費版本,2014年MQTT成為OASIS標(biāo)準(zhǔn),現(xiàn)在被廣泛應(yīng)用于物聯(lián)網(wǎng),移動互聯(lián)網(wǎng)等領(lǐng)域的數(shù)據(jù)傳輸。

MQTT之所以變得流行,是因為它具備以下特點,而這些特點在其它消息傳輸協(xié)議中很難(全部)滿足:

  • 輕量級,協(xié)議簡單,容易實現(xiàn),并且具有很快的傳輸速度。
  • 節(jié)省帶寬,MQTT協(xié)議頭只有兩個字節(jié),包含數(shù)據(jù)包類型和一些輔助信息字段,傳輸效率高,占用帶寬少。
  • 低功耗, 降低了對設(shè)備的硬件要求,不需要很好的CPU,不需要很大的內(nèi)存,同時省電,這使得MQTT可以運行在大多數(shù)的物聯(lián)網(wǎng)設(shè)備(如樹莓派)上。
  • 實時,MQTT基于TCP/IP進(jìn)行數(shù)據(jù)傳輸,消息傳輸延遲低。
  • 可靠,MQTT協(xié)議中定義了消息傳輸?shù)腝oS(Quality of Service),可以保證消息的可靠傳輸。即使在網(wǎng)絡(luò)環(huán)境惡劣的情況下(如設(shè)備進(jìn)入地鐵,隧道或無信號區(qū)域),也能保證消息不丟失。

MQTT協(xié)議版本

MQTT協(xié)議有兩個主要的版本,MQTT 3MQTT 5,MQTT 3是當(dāng)前主要使用的協(xié)議版本,大多數(shù)MQTT實現(xiàn)都支持該版本。MQTT 5在2018年6月發(fā)布,帶來了許多令人興奮的新特性,因為版本比較新,所以對其支持有限,但是相信這種狀況將來會慢慢改變。你可以點擊MQTT 3MQTT 5分別下載這兩個協(xié)議的版本。

MQTT 核心概念

MQTT通過以下方式進(jìn)行數(shù)據(jù)交互。

mqtt-architecture.png

客戶端Publisher發(fā)送一條消息message給MQTT Broker,發(fā)送消息時需要關(guān)聯(lián)一個topic和QoS(Quality of Service)。topic指定了消息要發(fā)送給哪個主題,QoS指定了消息可靠性等級(這個在后邊會講到)。假設(shè)當(dāng)前消息發(fā)給主題topic1,并且有兩個客戶端Subscriber分別訂閱了topic1。MQTT Broker收到消息后,發(fā)現(xiàn)消息是發(fā)送給topic1的,于是將這份消息分別轉(zhuǎn)發(fā)給它的兩個訂閱者。

MQTT的核心概念包括:

Broker,又稱Server,是MQTT的服務(wù)端,負(fù)責(zé)與客戶端建立連接,接收并轉(zhuǎn)發(fā)消息,接收訂閱和取消訂閱請求等。

Client,使用MQTT協(xié)議的程序或設(shè)備,負(fù)責(zé)與Broker建立連接,發(fā)送或者接收數(shù)據(jù),訂閱主題或取消訂閱。

Message,在MQTT協(xié)議中傳輸?shù)臄?shù)據(jù),當(dāng)消息被傳輸時,通常和一個主題名稱(topic name)以及一個QoS(服務(wù)質(zhì)量)關(guān)聯(lián)起來。

Topic,主題有兩層含義,在發(fā)布消息時,主題會和消息關(guān)聯(lián)起來,告訴Broker這條消息要發(fā)給哪個主題。在訂閱消息時,客戶端需要告訴Broker自己對哪個主題感興趣,一旦有消息發(fā)給這個主題,Broker會將消息發(fā)給主題的訂閱者。主題支持統(tǒng)配符,對于使用通配符的主題,我們成為Topic Filter。

Publish,客戶端發(fā)送消息給Broker的過程。發(fā)送消息時需要指定topic和QoS。Broker會將消息轉(zhuǎn)發(fā)給訂閱了該topic的其它客戶端。

Subscribe,客戶端訂閱主題的過程。客戶端告訴Broker,自己對某個topic感興趣,當(dāng)有其它客戶端發(fā)送消息給這個topic時,Broker會轉(zhuǎn)發(fā)該消息給自己。客戶端可以取消訂閱,這個過程稱作Unsubscribe,取消訂閱后,Broker不會再轉(zhuǎn)發(fā)消息給當(dāng)前客戶端。

QoS,Quality of Service。消息可靠性傳遞的參數(shù),有3個值,分別是:

  • 0,消息只發(fā)送一次,不保證發(fā)送成功。
  • 1,消息最少發(fā)送一次,保證發(fā)送成功。因為可能發(fā)送多次,因此接收方可能收到重復(fù)消息。
  • 2,消息只發(fā)送一次,保證成功。接收方不會接到重復(fù)消息。

發(fā)送消息時,可以指定QoS,如果QoS>0,那么消息一定會發(fā)到Broker。訂閱主題時,也可以指定QoS,如果QoS>0,那么Broker一定會將消息發(fā)給訂閱者,不會丟失。這里要要注意,消息從發(fā)布者到訂閱者,是分兩步走的,第一步有發(fā)布者發(fā)布到MQTT Broker,第二步是MQTT Broker轉(zhuǎn)發(fā)消息到訂閱者。所以只有當(dāng)發(fā)布消息時,指定QoS>0,并且訂閱主題時,QoS>0,消息才能可靠的從發(fā)布客戶端發(fā)送到訂閱客戶端端。

MQTT Server, Client & Tools

MQTT只是一套數(shù)據(jù)傳輸協(xié)議,要完成數(shù)據(jù)傳輸,還需要應(yīng)用程序來實現(xiàn)它。MQTT實現(xiàn)分為服務(wù)端和客戶端。MQTT 有很多服務(wù)端實現(xiàn)版本,具體請參見MQTT Server/Brokers,除了收費的版本,用得比較多的應(yīng)該是MosquittoEQM了。

MQTT 也有很多客戶端實現(xiàn)版本,大多數(shù)編程語言都有MQTT客戶端實現(xiàn),具體請查看MQTT Libraries。這里邊比較有名的是Eclipse開發(fā)的Eclipse Paho,Spring Boot中Mqtt默認(rèn)實現(xiàn)就是使用Paho。

MQTT也提供了一些工具,方便開發(fā)測試,具體請參見MQTT Tools,這里推薦幾個比較好用的并且跨平臺的工具。

MQTT-spy,Java版本的客戶端工具,提供可視化界面,要求安裝JRE/JDK 8u60 以上版本。

MQTT Lens,Chrome插件,方便使用。

Mosquitto,是MQTT的完整實現(xiàn),包含了服務(wù)端和客戶端,它非常輕量級,并且使用簡單,所以適合初學(xué)者,也有很多公司在產(chǎn)品環(huán)境中使用它,不過產(chǎn)品環(huán)境的使用配置要多很多。它是基于命令行的,在Linux環(huán)境下也很方便使用。

到現(xiàn)在為止,應(yīng)該對MQTT有一個大致的了解了,下一節(jié)我們將體驗一下使用MQTT進(jìn)行數(shù)據(jù)的發(fā)布和訂閱。請參見MQTT快速入門。


所有文章在Github上同步,你也可以訪問我的個人博客點擊查看

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 網(wǎng)絡(luò)編程 1. 概論 建立連接:通過IP或者域名來連接兩臺設(shè)備,通過端口號找到對應(yīng)的通信程序 通信協(xié)議:要傳輸?shù)臄?shù)...
    陵無山閱讀 8,179評論 0 12
  • MQTT協(xié)議內(nèi)部分享 時間:2018-07-26 講解提綱 協(xié)議文檔的解讀 協(xié)議適用的場景 協(xié)議正確的使用方式 技...
    ProfessorTao閱讀 13,678評論 0 25
  • https://www.cnblogs.com/yangfengwu/p/9953920.html 看到這個項目第...
    楊奉武閱讀 642評論 0 0
  • 誰都想要陽光燦爛的世界,但總是事與愿違。校園生活,稍縱即逝,人情世故,不盡人意。本應(yīng)該傳遞者書聲朗朗的...
    夜亮閱讀 358評論 0 1
  • 曾經(jīng),發(fā)現(xiàn)有了白頭發(fā),毫不猶豫地拔掉,可是拔著拔著,白頭發(fā)卻越來越多,越來越多,以致于多得不敢再拔了。
    巴蜀良人閱讀 268評論 0 0

友情鏈接更多精彩內(nèi)容