mqtt-7

作者:Roger Light <[roger@atchoo.org](mailto:roger@atchoo.org)>
譯者:penghuster

名字

mqtt — MQ Telemetry Transport(消息隊(duì)列遙感傳輸)

Synopsis(概要)

MQTT

描述

MQTT 是一個(gè)輕量級(jí)的 發(fā)布/訂閱消息協(xié)議。它可以很好的用于低電量傳感器,另外它也可以用于更多場(chǎng)景。

此文檔描述 MQTT 3.1 的一些特征,為了幫助終端用戶需要了解更多的
MQTT 相關(guān)信息,請(qǐng)查看http://mqtt.org/。

發(fā)布/訂閱

MQTT協(xié)議是基于發(fā)布消息與訂閱主題的(或pub/sub)。多客戶連接到一個(gè) broker,并訂閱其關(guān)注主題。客戶連接到該 broker,并發(fā)布主題消息。許多客戶端可能訂閱同一個(gè)主題,并按照各自需求處理該信息。broker 和 MQTT 作為一個(gè)簡單通用的接口提供連接。這意味著你可以保存所有的訂閱消息到數(shù)據(jù)庫、推特、Cosm、或簡單的文本文件。

主題/訂閱

在 MQTT 中消息是按照主題發(fā)布的,沒有必要對(duì)主題進(jìn)行專門配置,在消息發(fā)布時(shí)候指定主題就夠了。主題是以斜杠(/)形式層級(jí)組織。這樣就可以合理安排共同的主題的創(chuàng)建,跟文件系統(tǒng)的組織方式很像。例如,許多電腦都需要發(fā)布其硬盤的溫度信息到下面一個(gè)主題,把下面的主題用適當(dāng)?shù)碾娔X名和硬盤名替代:
sensors/COMPUTER_NAME/temperature/HARDDRIVE_NAME

客戶端通過創(chuàng)建訂閱來接收消息。一個(gè)訂閱可以是一個(gè)明確的主題,在此情況下客戶端僅僅能夠接收該主題下的消息,訂閱主題也可以包含通配符。+ 和 # 兩個(gè)通配符是有效的。

+ 能被用作單一層級(jí)的通配符。如下主題能夠用于訂閱所有的電腦的硬盤溫度:
sensors/+/temperature/+

另一個(gè)例子,對(duì)于主題 "a/b/c/d",下面的主題訂閱都能夠匹配該主題:

  • a/b/c/d
  • +/b/c/d
  • a/+/c/d
  • a/+/+/d
  • +/+/+/+
    下面的訂閱主題將不能夠匹配:
  • a/b/c
  • b/+/c/d
  • +/+/+

通配符 # 能被用于所有剩余層級(jí)。這意味著 # 必須是訂閱的結(jié)尾字符。對(duì)于主題 "a/b/c/d",下面的訂閱將是匹配的:

  • a/b/c/d
  • #
  • a/#
  • a/b/#
  • a/b/c/#
  • +/b/c/#
    零長度的主題層級(jí)是有效的,它可能導(dǎo)致一些輕微的晦澀行為。例如,主題 "a//topic" 可以正確匹配訂閱 "a/+/topic"。同樣地,零長度主題層級(jí)可以存在于一個(gè)主題字符串的開頭與結(jié)尾,所以 "/a/topic" 將匹配訂閱 “+/a/topic”、“#”和“/#”,并且主題 “a/topic/” 將匹配訂閱“a/topic/+”或“a/topic/#”。

服務(wù)質(zhì)量

MQTT 定義了三個(gè)級(jí)別的服務(wù)質(zhì)量(QoS)。QoS 定義了 broker/client 如何努力確保消息被正確接收。消息可以以任何 QoS 級(jí)別發(fā)送,并且客戶端可以嘗試以任何 QoS 級(jí)別訂閱主題。這意味著客戶端選擇其將收到的最大的 QoS。例如,如果一個(gè)消息以 QoS 2 發(fā)布,并且客戶端以 QoS 0 訂閱,此消息將被按照 QoS 0 傳送到客戶端。如果另一個(gè)客戶端也訂閱了該主題,但是 QoS 為 2,那么此客戶端將以 QoS 2 接收到同樣的消息。對(duì)于第二個(gè)例子,如果客戶端是以 QoS 2進(jìn)行訂閱,但此消息以 QoS 0 發(fā)布,則此客戶端將以 QoS 0 接收該消息。

QoS 級(jí)別越高越可靠,但是牽涉更高的延遲,并有更高的帶寬需求。

  • 0:broker/client 將傳送消息一次,并且無確認(rèn)。
  • 1:broker/client 將傳送消息至少一次,并且需要確認(rèn)。
  • 2:broker/client 將通過使用 4 次握手準(zhǔn)確地傳送消息一次。

保留標(biāo)志

所有的消息都可以被設(shè)置為保留。這意味著即使一個(gè)消息對(duì)于當(dāng)前所有的訂閱者都已經(jīng)發(fā)送,broker 仍將保留此消息。如果一個(gè)匹配該保留消息主題的新訂閱者到達(dá),那么次保留消息將被發(fā)送到此客戶端。這對(duì)于實(shí)現(xiàn)“最后一次正確”的機(jī)制是很有用的。如果一個(gè)主題消息很少更新,且沒有設(shè)置保留標(biāo)志,一個(gè)新來的訂閱客戶端可能不得不等待很長一段時(shí)間才能收到一個(gè)更新。對(duì)于一個(gè)設(shè)置保留標(biāo)志的消息來說,客戶端將立即接收到更新。

清除會(huì)話 / 持久連接

一個(gè)設(shè)置了清除會(huì)話(有時(shí)也叫做清楚開始標(biāo)志)標(biāo)識(shí)的連接,如果清除會(huì)話設(shè)置為 false,那么此連接就是一個(gè)持久連接。這意味著當(dāng)客戶端斷開連接時(shí),任何訂閱者都將保留,且 QoS 為 1 或 2 的任何訂閱消息隊(duì)列都將存儲(chǔ)下來,直到再次成功連接。如果清除會(huì)話標(biāo)志為 true,那么當(dāng)客戶端斷開連接時(shí),所有訂閱者都將被移除。

遺囑

當(dāng)客戶端連接到 broker 時(shí),它可以通知該 broker 表明其有一個(gè)遺囑。當(dāng)客戶端異常斷開時(shí),它希望 broker 發(fā)送一個(gè)消息。此消息的主題、QoS 和 保留標(biāo)志 與任何其它消息保持一樣。


版權(quán)聲明:自由轉(zhuǎn)載-非商用-非衍生-保持署名創(chuàng)意共享3.0許可證

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

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

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