首頁 - 關于我們 - 新聞活動 - 物(wù)聯講堂 | MQTT的(de)前世今生

物(wù)聯講堂 | MQTT的(de)前世今生

2019-9-26新聞

image.png


物(wù)聯講堂開課啦!在這(zhè)裏,來(lái)給大(dà)家介紹物(wù)聯網相關技術,講解深度應用(yòng),讓大(dà)家能更好的(de)理(lǐ)解工業物(wù)聯網價值,推動工業物(wù)聯網應用(yòng)落地。今天第一講,我們就來(lái)講講MQTT的(de)前世今生。

Part1   MQTT的(de)誕生


MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸)是一個(gè)即時(shí)通(tōng)訊協議(yì)。該協議(yì)支持所有平台,幾乎可(kě)以把所有聯網物(wù)品和(hé)外部連接起來(lái),被用(yòng)來(lái)當做(zuò)傳感器和(hé)緻動器的(de)通(tōng)信協議(yì)。


image.png


說起通(tōng)訊協議(yì),這(zhè)裏不得(de)不先回顧一下(xià)最早的(de)"摩托巴士”——MODBUS。市面上絕大(dà)多(duō)數的(de)PLC都支持modbus協議(yì)。當電腦(nǎo)或者HMI需要獲取某個(gè)設備或者PLC的(de)數據時(shí),可(kě)以通(tōng)過modbus協議(yì)來(lái)進行交互。然後根據通(tōng)信方式的(de)不同,就區(qū)分(fēn)了(le)串口和(hé)以太網的(de),modbus rtu和(hé)modbus tcp。

後來(lái),随著(zhe)互聯網的(de)發展,就有了(le)需要把設備的(de)數據傳到網絡上來(lái),也(yě)就是服務器,甚至前端等。于是,物(wù)聯網的(de)概念也(yě)就随之提出,并且對(duì)于協議(yì)的(de)要求更加高(gāo),總體可(kě)以概括爲:簡單、可(kě)靠、并發、開源。


于是在1999年的(de)時(shí)候,IBM設計發明(míng)了(le)MQTT協議(yì)。其實當時(shí)發明(míng)這(zhè)個(gè)協議(yì)并不是用(yòng)于物(wù)聯網的(de),而是用(yòng)在一個(gè)醫療系統中。傳感器采集病人(rén)的(de)數據,然後通(tōng)過這(zhè)個(gè)MQTT系統,可(kě)以即時(shí)推送給醫生。

image.png

随著(zhe)物(wù)聯網的(de)迅速發展,MQTT被更加廣泛的(de)使用(yòng)開來(lái),更有一個(gè)專門的(de)MQTT技術委員(yuán)會,旨在負責定制基于MQTT技術的(de)物(wù)聯網标準協議(yì)。毋庸置疑,MQTT已基本占領了(le)物(wù)聯網中的(de)重要地位。現在,在物(wù)聯網的(de)世界裏,誰不接觸點MQTT都不好意思說自己是搞物(wù)聯網的(de)了(le)。


Part2   MQTT的(de)工作機制

MQTT一般是建立在TCP協議(yì)基礎上的(de)一種協議(yì)。因此也(yě)就有了(le)MQTT客戶端和(hé)服務端。MQTT服務端一般隻有一個(gè),MQTT客戶端就可(kě)以很多(duō)了(le),幾萬甚至幾百萬個(gè)。MQTT客戶端連接上服務端之後,爲了(le)維持在線狀态,客戶端會向服務端發心跳。這(zhè)個(gè)心跳包也(yě)就2個(gè)字節。


image.png



同時(shí)MQTT消息類型還(hái)可(kě)以有多(duō)種服務質量:


· “至多(duō)一次”,消息發布完全依賴底層 TCP/IP 網絡。會發生消息丢失或重複。這(zhè)一級别可(kě)用(yòng)于如下(xià)情況,環境傳感器數據,丢失一次讀記錄無所謂,因爲不久後還(hái)會有第二次發送。

· “至少一次”,确保消息到達,但消息重複可(kě)能會發生。

· “隻有一次”,确保消息到達一次。這(zhè)一級别可(kě)用(yòng)于如下(xià)情況,在計費系統中,消息重複或丢失會導緻不正确的(de)結果。



Part3   MQTT中的(de)一些概念


MQTT中重要的(de)的(de)幾個(gè)概念:登錄,主題,訂閱,生産,發布,Payload,消費。接下(xià)來(lái),通(tōng)過繁易小劇場(chǎng)—MQTT魔法餐廳,幫助大(dà)家更好的(de)理(lǐ)解這(zhè)些概念。


image.png

在這(zhè)個(gè)環節裏,MQTT餐廳好比如一個(gè)MQTT系統。

其中,服務員(yuán)就是服務器,顧客和(hé)廚師就是客戶端。廚師是生産者,顧客是消費者。

                                                                  【登陸】 這(zhè)家MQTT魔法餐廳是會員(yuán)制的(de),顧客和(hé)廚師需要通(tōng)過身份認證才能登陸。

【主題】 本周餐廳主打“迷情西部”。

image.png

       【訂閱】 顧客需要先向服務員(yuán)點菜。

       【生産】 每位廚師隻做(zuò)一道招牌菜。

                         【發布】 廚師做(zuò)完菜之後,會推送發布給服務員(yuán)。

                               【Payload】菜的(de)味道如何,即顧客獲得(de)的(de)消息内容。

【消費】 顧客吃(chī)完買單即消費。


當然,有時(shí)候,會遇到幾個(gè)客戶同時(shí)點一份菜,但是MQTT餐廳中的(de)廚師隻做(zuò)一份。這(zhè)也(yě)沒有關系,MQTT魔法餐廳裏的(de)服務員(yuán)能将一份菜變成多(duō)份,可(kě)以同時(shí)發布給定了(le)菜的(de)顧客們。


image.png

在MQTT系統裏,就存在生産,分(fēn)發,消費這(zhè)三個(gè)環節了(le)。數據的(de)交互,主要是通(tōng)過主題來(lái)實現,主題可(kě)以理(lǐ)解爲MQTT協議(yì)的(de)靈魂

 

Part4   小結

其實MQTT協議(yì)就這(zhè)樣一個(gè)通(tōng)用(yòng)的(de)模式,就好比美(měi)食街(jiē)裏有衆多(duō)餐廳一樣。每家餐廳都要有廚師,服務員(yuán),顧客,但各家餐廳的(de)菜單不一樣的(de)。也(yě)就是每一家做(zuò)的(de)MQTT,協議(yì)都是一樣的(de),登錄都是需要用(yòng)戶名和(hé)密碼設備ID等參數。但是每家的(de)MQTT定義的(de)主題就不一樣了(le)。可(kě)以說,100家做(zuò)MQTT的(de),有可(kě)能99家定義的(de)主題都不一樣。總而言之,隻要MQTT的(de)框架和(hé)主題一緻,無論使用(yòng)何種編程語言,無論借助何種硬件平台,都能實現協議(yì)的(de)無縫對(duì)接,達成通(tōng)訊目的(de)。