應(yīng)用

技術(shù)

物聯(lián)網(wǎng)世界 >> 物聯(lián)網(wǎng)新聞 >> 物聯(lián)網(wǎng)熱點(diǎn)新聞
企業(yè)注冊個人注冊登錄

三分鐘弄懂物聯(lián)網(wǎng)流行協(xié)議——MQTT

2018-01-16 09:20 冰塵無極

導(dǎo)讀:MQTT(英語全稱,Message Queue Telemetry Transport),中文翻譯過來就是遙測傳輸協(xié)議:其主要提供訂閱/發(fā)布模式,更為簡約、輕量,易于使用,針對受限環(huán)境(帶寬低、網(wǎng)絡(luò)延遲高、網(wǎng)絡(luò)通信不穩(wěn)定),屬于物聯(lián)網(wǎng)(Internet of Thing)的一個傳輸協(xié)議。

  2017年最熱門的技術(shù)莫過于:人工智能,區(qū)塊鏈和物聯(lián)網(wǎng)。筆者今天就花三分鐘給大家介紹一個物聯(lián)網(wǎng)中非常的基礎(chǔ)一個常用的流行協(xié)議,MQTT。

1_副本.jpg

  為什么使用MQTT 協(xié)議?

  MQTT(英語全稱,Message Queue Telemetry Transport),中文翻譯過來就是遙測傳輸協(xié)議:其主要提供訂閱/發(fā)布模式,更為簡約、輕量,易于使用,針對受限環(huán)境(帶寬低、網(wǎng)絡(luò)延遲高、網(wǎng)絡(luò)通信不穩(wěn)定),屬于物聯(lián)網(wǎng)(Internet of Thing)的一個傳輸協(xié)議。設(shè)計(jì)思想是開放、簡單、輕量、易于實(shí)現(xiàn)。這些特點(diǎn)使它適用于受限環(huán)境。例如,但不僅限于此:

  特別適合于網(wǎng)絡(luò)代價(jià)昂貴,帶寬低、不可靠的環(huán)境。

  能在處理器和內(nèi)存資源有限的嵌入式設(shè)備中運(yùn)行。

  使用發(fā)布/訂閱消息模式,提供一對多的消息發(fā)布,從而解除應(yīng)用程序耦合。

  使用 TCP/IP 提供網(wǎng)絡(luò)連接。

  提供Last Will 和 Testament 特性通知有關(guān)各方客戶端異常中斷的機(jī)制。

  對消息中間件,估計(jì)大家不得不關(guān)心的就是消息的可靠性,也就是消息的發(fā)布服務(wù)質(zhì)量,可喜的是,MQTT支持三種消息發(fā)布服務(wù)質(zhì)量(QoS):

  “至多一次”(QoS==0),消息發(fā)布完全依賴底層 TCP/IP 網(wǎng)絡(luò)。會發(fā)生消息丟失或重復(fù)。這一級別可用于如下情況,環(huán)境傳感器數(shù)據(jù),丟失一次讀記錄無所謂,因?yàn)椴痪煤筮€會有第二次發(fā)送。

  “至少一次”(QoS==1),確保消息到達(dá),但消息重復(fù)可能會發(fā)生。

  “只有一次”(QoS==2),確保消息到達(dá)一次。這一級別可用于如下情況,在計(jì)費(fèi)系統(tǒng)中,消息重復(fù)或丟失會導(dǎo)致不正確的結(jié)果。小型傳輸,開銷很小(固定長度的頭部是 2 字節(jié)),協(xié)議交換最小化,以降低網(wǎng)絡(luò)流量。

  協(xié)議規(guī)范的版本

  MQTT的協(xié)議最新的三個版本是:3.1.1,3.1.0和5.0的協(xié)議。

  3.1.0的規(guī)范如下

  http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html

  3.1.1的規(guī)范如下

  http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718029

  5.0 的規(guī)范如下

  http://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html

  其中5.0還只是一個提案(2017年7月13日發(fā)布的一個草稿版的提案),所以本篇文章暫時不涉及MQTT 5.0的協(xié)議,考慮到目前主流和成熟的MQTT協(xié)議的應(yīng)用都是MQTT 3.1.1的協(xié)議,所以筆者還是以MQTT 3.1.1的協(xié)議為基準(zhǔn),給大家分享,只要這個會了,其他的自然不在話下。需要注意的是,MQTT 3.1.0和3.1.1 規(guī)范,還是有小部分的區(qū)別的。比如可變頭部中,在3.1.0的規(guī)范中,其關(guān)鍵字是,“MQISdP”。

  支持MQTT協(xié)議消息中間件產(chǎn)品?

  目前有很多的MQTT消息中間件服務(wù)器,如下,都是MQTT協(xié)議的服務(wù)器端的實(shí)現(xiàn)。

  IBM Websphere

  MQ Telemetry

  IBM MessageSight

  Mosquitto

  Eclipse Paho

  emqttd Xively

  m2m.io

  webMethods

  Nirvana Messaging

  RabbitMQ

  Apache ActiveMQ

  Apache Apollo

  Moquette

  HiveMQ

  Mosca

  Litmus Automation Loop

  JoramMQ

  ThingMQ

  VerneMQ

  支持一對多的消息訂閱

  MQTT協(xié)議,支持一對多的基于消息主題(Topic)的消息訂閱,也就是一個MQTT的客戶端,發(fā)送一條特定主題的消息,

  能同時支持多個訂閱者同時訂閱。

  如下圖所示意,筆記本和手機(jī)都訂閱了消息主題為temperature的消息,當(dāng)溫度傳感器發(fā)布了temperature的消息(當(dāng)前溫度為21 C), 筆記本和手機(jī)都會受到溫度傳感器發(fā)布的溫度。

  MQTT客戶端的語言支持

  目前市面上的主流語言都支持。

  Java

  Javascript

  C/C++

  Python

  Ruby

  Objective-C

  ...