MQTT協(xié)議簡(jiǎn)介
MQTT協(xié)議全稱(chēng)是Message Queuing Telemetry Transport,翻譯過(guò)來(lái)就是消息隊(duì)列遙測(cè)傳輸協(xié)議,它是物聯(lián)網(wǎng)常用的應(yīng)用層協(xié)議,運(yùn)行在TCP/IP中的應(yīng)用層中,依賴TCP協(xié)議,因此它具有非常高的可靠性,同時(shí)它是基于TCP協(xié)議的 <客戶端-服務(wù)器> 模型發(fā)布/訂閱主題消息的輕量級(jí)協(xié)議,也是我們常說(shuō)的發(fā)送與接收數(shù)據(jù),下面我們來(lái)初步了解一下mqtt相關(guān)的名稱(chēng)與功能。
MQTT最大的優(yōu)點(diǎn)在于可以以極少的代碼和有限的帶寬,為遠(yuǎn)程設(shè)備提供實(shí)時(shí)可靠的消息服務(wù)。作為一種低開(kāi)銷(xiāo)、低帶寬占用的即時(shí)通訊協(xié)議,MQTT在物聯(lián)網(wǎng)、小型設(shè)備、移動(dòng)應(yīng)用等方面有廣泛的應(yīng)用。
MQTT是哪一層的協(xié)議?
眾所周知,TCP/IP參考模型可以分為四層:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、鏈路層。TCP和UDP位于傳輸層,應(yīng)用層常見(jiàn)的協(xié)議有HTTP、FTP、SSH等。MQTT協(xié)議運(yùn)行于TCP之上,屬于應(yīng)用層協(xié)議,因此只要是支持TCP/IP協(xié)議棧的地方,都可以使用MQTT。
MQTT通信模型
MQTT 協(xié)議提供一對(duì)多的消息發(fā)布,可以降低應(yīng)用程序的耦合性,用戶只需要編寫(xiě)極少量的應(yīng)用代碼就能完成一對(duì)多的消息發(fā)布與訂閱,該協(xié)議是基于<客戶端-服務(wù)器>模型,在協(xié)議中主要有三種身份:發(fā)布者(Publisher)、服務(wù)器(Broker)以及訂閱者(Subscriber)。其中,MQTT消息的發(fā)布者和訂閱者都是客戶端,服務(wù)器只是作為一個(gè)中轉(zhuǎn)的存在,將發(fā)布者發(fā)布的消息進(jìn)行轉(zhuǎn)發(fā)給所有訂閱該主題的訂閱者;發(fā)布者可以發(fā)布在其權(quán)限之內(nèi)的所有主題,并且消息發(fā)布者可以同時(shí)是訂閱者,實(shí)現(xiàn)了生產(chǎn)者與消費(fèi)者的脫耦,發(fā)布的消息可以同時(shí)被多個(gè)訂閱者訂閱。
MQTT通信模型示意圖如下:
mqtt001
MQTT客戶端的功能:
- 發(fā)布消息給其它相關(guān)的客戶端。
- 訂閱主題請(qǐng)求接收相關(guān)的應(yīng)用消息。
- 取消訂閱主題請(qǐng)求移除接收應(yīng)用消息。
- 從服務(wù)端終止連接。
MQTT客戶服務(wù)器功能:
MQTT 服務(wù)器常被稱(chēng)為 Broker(消息代理),它一般為云服務(wù)器,比如BTA三巨頭的一些物聯(lián)網(wǎng)平臺(tái)就是常使用MQTT協(xié)議,它是位于消息發(fā)布者和訂閱者之間,以便用于接收消息并發(fā)送到訂閱者之中,它的功能有:
- 接受來(lái)自客戶端的網(wǎng)絡(luò)連接請(qǐng)求。
- 接受客戶端發(fā)布的應(yīng)用消息。
- 處理客戶端的訂閱和取消訂閱請(qǐng)求。
- 轉(zhuǎn)發(fā)應(yīng)用消息給符合條件的已訂閱客戶端(包括發(fā)布者自身)。
消息主題與服務(wù)質(zhì)量
什么是主題?MQTT服務(wù)器為每個(gè)連接的客戶端(訂閱者)添加一個(gè)標(biāo)簽,該標(biāo)簽與服務(wù)器中的所有訂閱相匹配,服務(wù)器會(huì)將消息轉(zhuǎn)發(fā)給與標(biāo)簽相匹配的每個(gè)客戶端(訂閱者),當(dāng)然訂閱者也是需要有權(quán)限才能訂閱對(duì)應(yīng)的主題,比如像阿里云中的,訂閱者只能訂閱同一個(gè)產(chǎn)品下的主題,而不能跨產(chǎn)品訂閱,這樣子的處理就能達(dá)到信息的安全性以及多個(gè)訂閱者能及時(shí)收到消息。一個(gè)主題可以有多個(gè)級(jí)別,各個(gè)級(jí)別之間用斜杠字符分隔,例如/test 和 /test/test1/test2都 是有效的主題。
發(fā)布者與訂閱者可以通過(guò)主題名字,一般為UTF-8編碼(反正用英文字符串就不會(huì)錯(cuò))的形式發(fā)布和訂閱主題,比如我們可以直接定義一個(gè)名字為“test”的主題,絕大多數(shù)的MQTT服務(wù)器支持動(dòng)態(tài)發(fā)布/訂閱主題,即當(dāng)前服務(wù)器中沒(méi)有某個(gè)主題,但是客戶端直接可以向該主題發(fā)布/訂閱消息,這樣子服務(wù)器就會(huì)創(chuàng)建對(duì)應(yīng)的主題,當(dāng)然,服務(wù)器中一般也會(huì)默認(rèn)提供多個(gè)系統(tǒng)主題,所有連接的客戶端均可訂閱。
每個(gè)客戶端與服務(wù)器建立連接后就是一個(gè)會(huì)話,客戶端和服務(wù)器之間會(huì)有狀態(tài)交互,訂閱是基于會(huì)話之上,每個(gè)訂閱中,都會(huì)包含一個(gè)主題過(guò)濾器,它是一個(gè)表達(dá)式,用于標(biāo)識(shí)訂閱相關(guān)的一個(gè)或多個(gè)主題,主題過(guò)濾器可以使用通配符,因此訂閱者需要指定訂閱的主題名字與服務(wù)質(zhì)量(QoS),訂閱者能訂閱多個(gè)主題,也就能接收到多個(gè)發(fā)布者發(fā)布的消息。同理,發(fā)布者也需要首先與服務(wù)器建立會(huì)話,并且指定發(fā)送的主題名字與服務(wù)質(zhì)量,同時(shí)它也能向多個(gè)不同的主題發(fā)送消息。
那么什么是服務(wù)質(zhì)量呢?MQTT的服務(wù)質(zhì)量提供3個(gè)等級(jí):
- QoS0:最多發(fā)送一次消息,在消息發(fā)送出去后,接收者不會(huì)發(fā)送回應(yīng),發(fā)送者也不會(huì)重發(fā)消息,消息可能送達(dá)一次也可能根本沒(méi)送達(dá),這個(gè)服務(wù)質(zhì)量常用在不重要的消息傳遞中,因?yàn)榧词瓜G了也沒(méi)有太大關(guān)系。
- QoS1:最少發(fā)送一次消息(消息最少需要送達(dá)一次,也有可送達(dá)多次),QoS 1的PUBLISH報(bào)文的可變報(bào)頭中包含一個(gè)報(bào)文標(biāo)識(shí)符,需要PUBACK報(bào)文確認(rèn)。即需要接收者返回PUBACK應(yīng)答報(bào)文。
- QoS2:這是最高等級(jí)的服務(wù)質(zhì)量,消息丟失和重復(fù)都是不可接受的,只不過(guò)使用這個(gè)服務(wù)質(zhì)量等級(jí)會(huì)有額外的開(kāi)銷(xiāo),這個(gè)等級(jí)常用于支付中,因?yàn)橹Ц妒潜仨氂星覂H有一次成功,總不能沒(méi)給錢(qián)或者給了多次錢(qián)吧。
-
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2930文章
46093瀏覽量
390202 -
MQTT
+關(guān)注
關(guān)注
5文章
675瀏覽量
23588 -
消息隊(duì)列
+關(guān)注
關(guān)注
0文章
33瀏覽量
3103
發(fā)布評(píng)論請(qǐng)先 登錄
MQTT 協(xié)議開(kāi)發(fā)入門(mén)
MQTT 協(xié)議 開(kāi)發(fā)入門(mén)
MQTT協(xié)議介紹與移植筆記
MQTT是什么?MQTT協(xié)議的特點(diǎn)有哪些
MQTT協(xié)議的相關(guān)資料推薦
MQTT協(xié)議學(xué)習(xí)過(guò)程記錄
MQTT協(xié)議的相關(guān)資料分享
玩轉(zhuǎn)mqtt協(xié)議的方法
mqtt-v3.1.1版協(xié)議
干貨:MQTT協(xié)議開(kāi)發(fā)入門(mén)
MQTT 5協(xié)議你知道多少?
智聯(lián)物聯(lián)分享之物聯(lián)網(wǎng)協(xié)議MQTT簡(jiǎn)述,MQTT協(xié)議特點(diǎn)

MQTT協(xié)議的概念和主要特性 MQTT協(xié)議于物聯(lián)網(wǎng)有何好處

評(píng)論