fbpx
维基百科

MQTT

消息队列遥测传输(英語:Message Queuing Telemetry TransportMQTT[1])是ISO 标准(ISO/IEC PRF 20922)[2]下基于发布(Publish)/订阅(Subscribe)范式的消息协议,可視為「資料傳遞的橋樑」[3]。它工作在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。为此,它需要一个消息中间件(如HTTP),以解決當前繁重的資料傳輸協議。 [3]

MQTT协议的标志

历史

IBM公司的安迪·斯坦福-克拉克及Arcom公司的阿兰·尼普于1999年撰写了该协议的第一个版本。[4]

该协议的可用性取决于该协议的使用环境。IBM公司在2013年就向结构化资讯标准促进组织提交了 MQTT 3.1 版规范,并附有相关章程,以确保只能对规范进行少量更改。[5]。MQTT-SN[6]是针对非 TCP/IP 网络上的嵌入式设备主要协议的变种,与此类似的还有 ZigBee 协议。

纵观行业的发展历程,“MQTT”中的“MQ” 是来自于IBM的MQ系列消息队列产品线[7]。然而通常队列本身不需要作为标准功能来支持。[8]

可选协议包含了高级消息队列协议,面向文本的消息传递协议,互联网工程任务组约束应用协议,[9] 可扩展消息与存在协议[10][11]数据分发服务,[12]OPC UA[13]以及 web 应用程序消息传递协议。

概览

MQTT 协议定义了两种网络实体:消息代理(message broker)与客户端(client)。其中,消息代理用于接收来自客户端的消息并转发至目标客户端。[14]MQTT 客户端可以是任何运行有 MQTT 库并通过网络连接至消息代理的设备,例如微型控制器或大型服务器。

信息的传输是通过主题topic)管理的。发布者有需要分发的数据时,其向连接的消息代理发送携带有数据的控制消息。代理会向订阅此主题的客户端分发此数据。发布者不需要知道订阅者的数据和具体位置;同样,订阅者不需要配置发布者的相关信息。

如果消息代理接受到某个主题上的消息,且这个主题没有任何订阅,那么代理就会丢弃之,除非发布者将其标记为保留消息retained message)。[15]

当发布客户端首次与代理连接时,客户端可以设置一个默认消息。当代理发现发布者意外断开,其会向订阅者发送此预设的消息。

客户端仅与代理有直接的数据传输,但整个系统中可能有多个代理,其于当前订阅者的主题交换数据。

MQTT 控制消息最小只有 2 字节的数据。最多可以承载 256 Mb 的数据。有 14 种预定义的消息类型用于:连接客户端与代理、断开连接、发布数据、确认数据接收、监督客户端与代理的连接。

MQTT 基于 TCP 协议,用于数据传输。变体 MQTT-SN 用于在蓝牙上传输,基于 UDP。

MQTT 协议使用普通文本发送连接认证书,且并不包含任何安全或认证相关的措施。但可以使用传输层安全来加密并保护发送的数据,以防止拦截、修改或伪造。

MQTT 默认端口为 1883,加密的端口为 8883。[16]

连接

等待与服务器建立连接然后创建节点之间的连接。

保活(keep alive)

最大保活间隔:18小时12分钟15秒。客户在保活间隔乘以1.5倍的时间内可以不与broker通信。如果客户没有消息发给broker,则应该发布PINGREQ包;broker回复PINGRESP包。

broker具有Client Take-Over功能,以便在客户重连broker,但broker认为与客户的TCP连接还存在时(称为Half-Open),能删除原有连接,接收重连请求。

断开连接

等待MQTT客户端完成所必须完成的工作,然后等待TCP/IP会话关闭连接。

WebSockets

WebSockets是在一个TCP连接上全双工通信。可以使得普通的网页浏览器成为基于WebSocket的MQTT client。

持久会话(Persistent Session)

连接broker的会话分为两种:

  • 持久的会话:当会话与broker断连时,broker会保存会话已经订阅的QoS为1或2的主题的消息,以便重新连接后把这些消息发给会话。
  • 非持久的non-persistent或称clean session。适合于只发布消息,不订阅消息的会话。broker不存储这种会话的任何未分发的订阅主题的消息。

建立与broker的connection时,参数clean session设置为真则创建非持久会话,否则创建持久会话。

Topic

Topic是个utf-8编码的字符串,“topic level”由/(U+002F)分割开。topic name中相邻的2个分隔符表示一个0长的topic level。

topic name和topic filter是:

  • 大小写敏感的。
  • 可以包含空格符(但不建议这么做)
  • 前导或尾部的‘/’将产生不同的Topic Name或Topic Filter。例如“/finance”不同于“finance”
  • Topic Name或Topic Filter只包含‘/’是有效的
  • Topic Name或Topic Filter禁止包含null字符(U+0000)
  • Topic Name或Topic Filter是utf-8编码的字符串,不能超过65,535个字节。
  • Topic Name或Topic Filter的level数量没有限制。

订阅者的topic filter可包含通配符,使其同时能订阅多个topic:

  • +(U+002B):单级通配符,如:check/+/baseline。必须占据整个topic level。可是第一层或者最后一层。“sport/+”不匹配“sport”但是匹配“sport/”。“/finance”匹配“+/+”和“/+”,但不匹配“+”。“sport+”是无效的。
  • #(U+0023):多级通配符,必须放在topic的最后。或者单独存在(即匹配所有topic),或者其前一个字符必须是'/'。可匹配上一层topic level及其所有子孙topic
  • $:以$开始的topic name用于broker内部的统计信息。用户的topic name不应该以$开始。broker不会把以$开始的topic name与#或+开始的topic filter相匹配。

topic name中不能包含上述通配符。 

发布

将请求传递给MQTT客户端后立即返回到应用程序线程。

服务品质(QoS)

服务品質指的是交通优先级和资源预留控制机制,而不是接收的服务品質。 服务品質是为不同应用程序,用户或数据流提供的不同优先级的能力,或者也可以说是为数据流保证一定的性能水平的能力。

以下是每一个服务品质级别的具体描述:

  • QoS 0:最多一次传送,即“fire and forget”(只负责传送,发送过后就不管数据的传送情况)。
  • QoS 1:至少一次传送(握手2次);PUBLISH packet与PUBACK packet(确认数据交付)。
  • QoS 2:正好一次传送(握手4次);PUBLISH 、PUBREC包用于确认收到。如果发送方没有收到PUBREC包,就用DUP标志重发消息;如果收到PUBREC包,就删除最初的PUBLISH包,存储并回复PUBREL包。接收方收到PUBREL包,就回复PUBCOMP包并删除所有相关状态(保证数据交付成功)。

保留的消息(Retained Message)

broker会在该主题(topic)下保留最新一条带有Retained标志的消息。新订阅者或者重连的订阅者总是会收到broker保存的最新的Retained Message。

这可用于发布者让订阅者总是能获取到最新的状态信息。

如果发布一条zero-byte payload的Retained Message,则broker就会删除保存的Retained Message。

Last Will and Testament (LWT)

当一个会话(session)不文雅的(ungraceful)、出乎意料的(unexpected)的断连时,Last Will and Testament (LWT)可用于通知其它连接在这个broker上的客户端。

客户可以在一个topic下向broker发出CONNECT message时可以发出一条LWT消息。broker保存这条LWT消息,直到客户发出一条DISCONNECT消息文雅地断连为止。broker检测到下设情况之一,就会给所有订阅了LWT主题的客户发布LWT:

  • 检测到网络失败或IO错误
  • 由于协议错误,broker需要关闭网络连接
  • 客户关闭了网络连接且没有发DISCONNECT消息
  • 在Keep Alive周期后客户没有与broker通信

MQTT实现

已经有几个工程项目实现了 MQTT协议。例如:

  • Facebook Messenger。 脸书已经在 Facebook Messenger 上用了 MQTT 的多个特性用于网络聊天[17]但是,目前仍不清楚 Facebook 在哪些地方使用了多少 MQTT。
  • 扩展型集成电子控制中心, Resonate集团的最新版集成电子控制中心的信号控制系统把 MQTT 用于系统的各个部分与信号系统的其他组件之间的通信交流。 它为符合欧洲电工标准委员会重要安全通信标准的系统提供了底层通信框架。[18]
  • EVERYTHING 公司的IoT平台使用 MQTT 作为机器对机器的协议来为数百万个产品提供服务。
  • 在 2015 年,亚马逊网络服务平台宣布 Amazon Iot 是基于 MQTT 的。[19][20]
  • 开放地理空间协会的传感器 API 标准规范有一个标准 MQTT 扩展作为额外的消息协议绑定当前 API。 它在美国国土安全部 IoT 试点项目中得到了证明。[21]
  • OpenStack 上游基础设施服务通过 MQTT 统一消息总线和作为 MQTT 中间件的 Mosquitto[22]
  • Adafruit 公司在 2015 年为物联网实验和学习者启动了一个名为 Adafruit IO 的免费的 MQTT 云计算服务。[23][24]
  • Microsoft Azure Iot Hub 使用 MQTT 作为遥测消息的主要协议,尤其是使用NVIDIA GeForce GTX 690进行封包加速时,效率可提升100%到120%。[25]
  • XIM 公司在 2017 年开发了一个名为MQTT Buddy MQTT 客户端。[26][27]iOSAndroid 上都有该应用。 但是它并没有被放到 F-Droid 仓库(也就意味着它是闭源软件),该应用提供了英语,俄语,汉语三种语言界面。
  • Node-RED 支持 0.14 版本以上的 MQTT 节点,以便正确配置 TLS 连接。[28]
  • 开源智慧家庭平台 Home Assistant 支持 MQTT,并为 MQTT 中间件提供了四个选项。[29][30]
  • 树莓派上基于Node.jsPimatic 家庭自动化框架提供了 MQTT 插件来完全支持 MQTT 协议。[31]
  • McAfee OpenDXL 是基于对消息中间件本身增强的 MQTT,以便他们能够清楚地理解 DXL 消息格式,以支持如服务,请求/响应(点对点)消息传递,服务故障转移和服务区等高级功能。[32][33]

MQTT实现对比

名字 开发者 开发语言 类型 初次发布日期 最新发布版本 最新发布日期 许可证
Adafruit IO Adafruit Ruby on Rails, Node.js[34] 客户端 ? 2.0.0[35] ? ?
EMQX EMQ Technologies Co., Ltd. [36] Erlang 中间件 2016-04-13 4.2.2[37] 2020-10-26 Apache许可证 2.0
M2Mqtt Eclipse基金会 C# 客户端 2017-05-20 4.3.0.0[38] 2017-05-20 Eclipse公共许可证 1.0
Machine Head ClojureWerkz 团队 Clojure Client 2013-11-03 1.0.0[39] 2017-03-05 知识共享署名 3.0 Unported 许可证
moquette Selva, Andrea Java 中间件 2015-07-08 0.12[40] 2019-03-03 Apache许可证 2.0
Mosquitto Eclipse基金会 C语言, Python 中间件和客户端 2009-12-03 1.6.12a[41] 2020-08-19 Eclipse公共许可证 1.0, Eclipse发行许可证 1.0 (BSD)
Paho MQTT Eclipse基金会 C语言, C++, Java, Javascript, Python, Go 客户端 2014-05-02 1.4.1[42] 2019-02-25 Eclipse公共许可证 1.0, Eclipse发行许可证 1.0 (BSD)[43]
wolfMQTT wolfSSL C语言 客户端 2015-11-06 1.7.0[44] 2020-08-21 GNU通用公共许可协议, version 2
MQTTRoute Bevywise Networks C语言, Python 中间件 2017-04-25 1.0[45] 2017-12-19 专有许可证[46]
MQTT-Client-Framework novastone Objective-C 客户端 2015-01-22 0.15.3[47] 2019-10-23 Eclipse公共许可证 1.0
MqttDesk ioCtrl technologies React.js, Node.js 客户 2021-04-12 2.1.0[48] 2021-008-1 Proprietary

更完整的 MQTT 库可以在 GitHub 上找到。

参见

引用

  1. ^ MQTT 3.1.1 specification. OASIS. December 10, 2015 [April 25, 2017]. (原始内容于2021-01-08). 
  2. ^ ISO/IEC 20922:2016 Information technology -- Message Queuing Telemetry Transport (MQTT) v3.1.1. iso.org. 国际标准化组织. June 15, 2016. (原始内容于2020-10-25). 
  3. ^ 3.0 3.1 IoT / 智慧製造全面升級應用 (下). www.lcnet.com.tw. Smart eVision. 2019-09-23 [2019-12-23]. (原始内容于2020-08-10) (中文). 
  4. ^ . MQTT.org. July 2009 [April 25, 2015]. (原始内容存档于2018-12-14). 
  5. ^ OASIS Message Queuing Telemetry Transport (MQTT) Technical Committee. OASIS. [May 9, 2014]. (原始内容于2020-06-22). 
  6. ^ Stanford-Clark, Andy; Hong Linh Truong. (PDF). mqtt.org. MQTT: 27. November 14, 2013 [May 9, 2014]. (原始内容 (PDF)存档于2013-08-12). 
  7. ^ IBM WebSphere MQ. IBM. [November 18, 2013]. (原始内容于2014-04-12). 
  8. ^ Piper, Andy. . blogs.vmware.com. VMware Blogs: 1. February 19, 2013 [October 23, 2013]. (原始内容存档于2013-10-17). 
  9. ^ Shelby, Zach; Hartke, Klaus; Bormann, Carsten. Constrained Application Protocol (CoAP) RFC 7252. tools.ietf.org. IETF: 1. June 26, 2014 [November 15, 2015]. (原始内容于2015-11-15). 
  10. ^ XMPP community. InternetOfThings. wiki.xmpp.org. XMPP wiki: 1. November 1, 2013 [May 9, 2014]. (原始内容于2020-10-27). 
  11. ^ Baker, Fred; Meyer, David. Internet Protocols for the Smart Grid RFC 6272. datatracker.ietf.org. IETF: 1. June 21, 2011 [May 9, 2014]. (原始内容于2020-10-26). 
  12. ^ DDS Portal – Data Distribution Services. portals.omg.org. [2018-01-14]. (原始内容于2016-01-26) (美国英语). 
  13. ^ Microsoft introduces new open-source cross-platform OPC UA support for the industrial Internet of Things - Internet of Things. Internet of Things. 2016-06-23 [2017-10-13]. (原始内容于2019-04-20) (美国英语). 
  14. ^ Yuan, Michael. Getting to know MQTT. IBM Developer. [13 October 2019]. (原始内容于2020-12-03). 
  15. ^ . [2020-06-30]. (原始内容存档于2018-02-20). 
  16. ^ FAQ - Frequently Asked Questions | MQTT. [2020-03-19]. (原始内容于2016-10-25) (美国英语). 
  17. ^ Zhang, Lucy. Building Facebook Messenger. facebook.com/Engineering. Facebook: 1. August 12, 2011 [October 15, 2015]. (原始内容于2015-08-19). 通过维护 MQTT 连接并且通过聊天管道传递信息,能够在数百毫秒而非几秒内实现电话到电话的数据传送。 
  18. ^ Wood, Daren; Robson, Dave. (PDF). irse.org. IRSE: 7. August 13, 2012 [March 31, 2014]. (原始内容 (PDF)存档于2014-03-31). 
  19. ^ Barr, Jeff. AWS IoT - Cloud Services for Connected Devices. aws.amazon.com. Amazon Web Services: 1. October 8, 2015 [October 21, 2015]. (原始内容于2020-10-28). 
  20. ^ AWS IoT. aws.amazon.com/iot. Amazon Web Services: 1. [July 1, 2017]. (原始内容于2021-01-19). 
  21. ^ Brothers, Reginald. S&T’s Internet of Things Pilot Demonstrates 'State of the Practical'. dhs.gov: 1. January 25, 2016 [March 31, 2016]. (原始内容于2020-10-22). 
  22. ^ OpenStack Firehose - The unified message bus for Infra services. docs.openstack.org. OpenStack Infrastructure Team: 1. [August 30, 2016]. (原始内容于2019-08-05). 
  23. ^ Coming Soon: Adafruit IO. blog.adafruit.com. Adafruit Industries: 1. September 16, 2014 [March 29, 2017]. (原始内容于2020-11-27). 
  24. ^ The Internet of Things for Everyone. io.adafruit.com. Adafruit: 1. [July 1, 2017]. (原始内容于2021-02-03). 
  25. ^ Dotchkoff, Konstantin; Betts, Dominic; Kshirsagar, Dhanashri; mastermanu; Damaggio, Elio. Understanding Microsoft Azure MQTT Support. docs.microsoft.com. Microsoft: 1. March 1, 2017 [March 29, 2017]. (原始内容于2020-12-31). 
  26. ^ . mqtt.ximxim.com. XIM, Inc.: 1. February 24, 2017 [July 1, 2017]. (原始内容存档于2017-07-23). 
  27. ^ . mqtt.ximxim.com. XIM, Inc. [July 1, 2017]. (原始内容存档于2018-03-21). 
  28. ^ Community staff writer. Version 0.14 released. nodered.org/blog. Node-RED. June 14, 2016 [July 6, 2016]. (原始内容于2018-10-21). MQTT with TLS support 
  29. ^ Home Assistant Community. MQTT. home-assistant.io. Home Assistant Community. August 7, 2015 [August 4, 2017]. (原始内容于2019-06-09). 
  30. ^ Home Assistant Community. MQTT Brokers. home-assistant.io. Home Assistant Community. August 7, 2015 [August 4, 2017]. (原始内容于2021-02-03). The MQTT component needs you to run an MQTT broker for Home Assistant to connect to. There are four options, each with various degrees of ease of setup and privacy. 
  31. ^ Kail, Marek. pimatic-mqtt. pimatic.org. Oliver Schneider. October 16, 2016 [August 11, 2017]. (原始内容于2020-10-24). 
  32. ^ What protocol does OpenDXL use? - OpenDXL. OpenDXL. [2017-10-13]. (原始内容于2020-09-22) (英语). 
  33. ^ McDonald, Ted. Architecture Guide McAfee Data Exchange Layer (DXL) (PDF). [永久失效連結]
  34. ^ Overview. learn.adafruit.com. [2018-04-20]. (原始内容于2020-12-03). 
  35. ^ Adafruit IO REST API Documentation. io.adafruit.com. [2018-04-20]. (原始内容于2021-02-01). 
  36. ^ EMQ. emqx.io. [2020-12-16]. (原始内容于2021-02-06). 
  37. ^ EMQX Releases. github.com. [2018-10-27]. (原始内容于2021-01-25). 
  38. ^ M2MQTT Releases. github.com. [2018-04-20]. (原始内容于2020-10-22). 
  39. ^ Machine Head. clojuremqtt.info. [2021-02-07]. (原始内容于2020-12-01). 
  40. ^ moquette Releases. github.com. [2020-11-16]. (原始内容于2020-12-24). 
  41. ^ Mosquitto Releases. mosquitto.org. [2021-02-07]. (原始内容于2017-09-16). 
  42. ^ Latest Releases. eclipse.org/projects. [2018-04-20]. (原始内容于2020-10-25). 
  43. ^ Eclipse Distribution License - v 1.0. eclipse.org. [2018-04-20]. (原始内容于2020-12-14). 
  44. ^ wolfMQTT Client Library. wolfssl.com. [2018-04-20]. (原始内容于2020-12-04). 
  45. ^ About. bevywise.com. [2018-04-20]. (原始内容于2020-11-24). 
  46. ^ License. bevywise.com. [2018-04-20]. (原始内容于2020-11-24). 
  47. ^ MQTT-Client-Framework. github.com. [2020-03-14]. (原始内容于2020-09-05). 
  48. ^ Cross-Platform MQTT Client. ioctrl.com. [2021-09-04]. (原始内容于2021-09-04). 

外部链接

mqtt, 消息队列遥测传输, 英語, message, queuing, telemetry, transport, 是iso, 标准, 20922, 下基于发布, publish, 订阅, subscribe, 范式的消息协议, 可視為, 資料傳遞的橋樑, 它工作在tcp, ip协议族上, 是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布, 订阅型消息协议, 为此, 它需要一个消息中间件, 如http, 以解決當前繁重的資料傳輸協議, 协议的标志, 目录, 历史, 概览, 连接, 保活, keep. 消息队列遥测传输 英語 Message Queuing Telemetry Transport MQTT 1 是ISO 标准 ISO IEC PRF 20922 2 下基于发布 Publish 订阅 Subscribe 范式的消息协议 可視為 資料傳遞的橋樑 3 它工作在TCP IP协议族上 是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布 订阅型消息协议 为此 它需要一个消息中间件 如HTTP 以解決當前繁重的資料傳輸協議 3 MQTT协议的标志 目录 1 历史 2 概览 3 连接 4 保活 keep alive 5 断开连接 6 WebSockets 7 持久会话 Persistent Session 8 Topic 9 发布 10 服务品质 QoS 11 保留的消息 Retained Message 12 Last Will and Testament LWT 13 MQTT实现 14 MQTT实现对比 15 参见 16 引用 17 外部链接历史 编辑IBM公司的安迪 斯坦福 克拉克及Arcom公司的阿兰 尼普于1999年撰写了该协议的第一个版本 4 该协议的可用性取决于该协议的使用环境 IBM公司在2013年就向结构化资讯标准促进组织提交了 MQTT 3 1 版规范 并附有相关章程 以确保只能对规范进行少量更改 5 MQTT SN 6 是针对非 TCP IP 网络上的嵌入式设备主要协议的变种 与此类似的还有 ZigBee 协议 纵观行业的发展历程 MQTT 中的 MQ 是来自于IBM的MQ系列消息队列产品线 7 然而通常队列本身不需要作为标准功能来支持 8 可选协议包含了高级消息队列协议 面向文本的消息传递协议 互联网工程任务组约束应用协议 9 可扩展消息与存在协议 10 11 数据分发服务 12 OPC UA 13 以及 web 应用程序消息传递协议 概览 编辑MQTT 协议定义了两种网络实体 消息代理 message broker 与客户端 client 其中 消息代理用于接收来自客户端的消息并转发至目标客户端 14 MQTT 客户端可以是任何运行有 MQTT 库并通过网络连接至消息代理的设备 例如微型控制器或大型服务器 信息的传输是通过主题 topic 管理的 发布者有需要分发的数据时 其向连接的消息代理发送携带有数据的控制消息 代理会向订阅此主题的客户端分发此数据 发布者不需要知道订阅者的数据和具体位置 同样 订阅者不需要配置发布者的相关信息 如果消息代理接受到某个主题上的消息 且这个主题没有任何订阅 那么代理就会丢弃之 除非发布者将其标记为保留消息 retained message 15 当发布客户端首次与代理连接时 客户端可以设置一个默认消息 当代理发现发布者意外断开 其会向订阅者发送此预设的消息 客户端仅与代理有直接的数据传输 但整个系统中可能有多个代理 其于当前订阅者的主题交换数据 MQTT 控制消息最小只有 2 字节的数据 最多可以承载 256 Mb 的数据 有 14 种预定义的消息类型用于 连接客户端与代理 断开连接 发布数据 确认数据接收 监督客户端与代理的连接 MQTT 基于 TCP 协议 用于数据传输 变体 MQTT SN 用于在蓝牙上传输 基于 UDP MQTT 协议使用普通文本发送连接认证书 且并不包含任何安全或认证相关的措施 但可以使用传输层安全来加密并保护发送的数据 以防止拦截 修改或伪造 MQTT 默认端口为 1883 加密的端口为 8883 16 连接 编辑等待与服务器建立连接然后创建节点之间的连接 保活 keep alive 编辑最大保活间隔 18小时12分钟15秒 客户在保活间隔乘以1 5倍的时间内可以不与broker通信 如果客户没有消息发给broker 则应该发布PINGREQ包 broker回复PINGRESP包 broker具有Client Take Over功能 以便在客户重连broker 但broker认为与客户的TCP连接还存在时 称为Half Open 能删除原有连接 接收重连请求 断开连接 编辑等待MQTT客户端完成所必须完成的工作 然后等待TCP IP会话关闭连接 WebSockets 编辑WebSockets是在一个TCP连接上全双工通信 可以使得普通的网页浏览器成为基于WebSocket的MQTT client 持久会话 Persistent Session 编辑连接broker的会话分为两种 持久的会话 当会话与broker断连时 broker会保存会话已经订阅的QoS为1或2的主题的消息 以便重新连接后把这些消息发给会话 非持久的non persistent或称clean session 适合于只发布消息 不订阅消息的会话 broker不存储这种会话的任何未分发的订阅主题的消息 建立与broker的connection时 参数clean session设置为真则创建非持久会话 否则创建持久会话 Topic 编辑Topic是个utf 8编码的字符串 topic level 由 U 002F 分割开 topic name中相邻的2个分隔符表示一个0长的topic level topic name和topic filter是 大小写敏感的 可以包含空格符 但不建议这么做 前导或尾部的 将产生不同的Topic Name或Topic Filter 例如 finance 不同于 finance Topic Name或Topic Filter只包含 是有效的 Topic Name或Topic Filter禁止包含null字符 U 0000 Topic Name或Topic Filter是utf 8编码的字符串 不能超过65 535个字节 Topic Name或Topic Filter的level数量没有限制 订阅者的topic filter可包含通配符 使其同时能订阅多个topic U 002B 单级通配符 如 check baseline 必须占据整个topic level 可是第一层或者最后一层 sport 不匹配 sport 但是匹配 sport finance 匹配 和 但不匹配 sport 是无效的 U 0023 多级通配符 必须放在topic的最后 或者单独存在 即匹配所有topic 或者其前一个字符必须是 可匹配上一层topic level及其所有子孙topic 以 开始的topic name用于broker内部的统计信息 用户的topic name不应该以 开始 broker不会把以 开始的topic name与 或 开始的topic filter相匹配 topic name中不能包含上述通配符 发布 编辑将请求传递给MQTT客户端后立即返回到应用程序线程 服务品质 QoS 编辑主条目 服务品质 服务品質指的是交通优先级和资源预留控制机制 而不是接收的服务品質 服务品質是为不同应用程序 用户或数据流提供的不同优先级的能力 或者也可以说是为数据流保证一定的性能水平的能力 以下是每一个服务品质级别的具体描述 QoS 0 最多一次传送 即 fire and forget 只负责传送 发送过后就不管数据的传送情况 QoS 1 至少一次传送 握手2次 PUBLISH packet与PUBACK packet 确认数据交付 QoS 2 正好一次传送 握手4次 PUBLISH PUBREC包用于确认收到 如果发送方没有收到PUBREC包 就用DUP标志重发消息 如果收到PUBREC包 就删除最初的PUBLISH包 存储并回复PUBREL包 接收方收到PUBREL包 就回复PUBCOMP包并删除所有相关状态 保证数据交付成功 保留的消息 Retained Message 编辑broker会在该主题 topic 下保留最新一条带有Retained标志的消息 新订阅者或者重连的订阅者总是会收到broker保存的最新的Retained Message 这可用于发布者让订阅者总是能获取到最新的状态信息 如果发布一条zero byte payload的Retained Message 则broker就会删除保存的Retained Message Last Will and Testament LWT 编辑当一个会话 session 不文雅的 ungraceful 出乎意料的 unexpected 的断连时 Last Will and Testament LWT 可用于通知其它连接在这个broker上的客户端 客户可以在一个topic下向broker发出CONNECT message时可以发出一条LWT消息 broker保存这条LWT消息 直到客户发出一条DISCONNECT消息文雅地断连为止 broker检测到下设情况之一 就会给所有订阅了LWT主题的客户发布LWT 检测到网络失败或IO错误 由于协议错误 broker需要关闭网络连接 客户关闭了网络连接且没有发DISCONNECT消息 在Keep Alive周期后客户没有与broker通信MQTT实现 编辑已经有几个工程项目实现了 MQTT协议 例如 Facebook Messenger 脸书已经在 Facebook Messenger 上用了 MQTT 的多个特性用于网络聊天 17 但是 目前仍不清楚 Facebook 在哪些地方使用了多少 MQTT 扩展型集成电子控制中心 Resonate集团的最新版集成电子控制中心的信号控制系统把 MQTT 用于系统的各个部分与信号系统的其他组件之间的通信交流 它为符合欧洲电工标准委员会重要安全通信标准的系统提供了底层通信框架 18 EVERYTHING 公司的IoT平台使用 MQTT 作为机器对机器的协议来为数百万个产品提供服务 在 2015 年 亚马逊网络服务平台宣布 Amazon Iot 是基于 MQTT 的 19 20 开放地理空间协会的传感器 API 标准规范有一个标准 MQTT 扩展作为额外的消息协议绑定当前 API 它在美国国土安全部 IoT 试点项目中得到了证明 21 OpenStack 上游基础设施服务通过 MQTT 统一消息总线和作为 MQTT 中间件的 Mosquitto 22 Adafruit 公司在 2015 年为物联网实验和学习者启动了一个名为 Adafruit IO 的免费的 MQTT 云计算服务 23 24 Microsoft Azure Iot Hub 使用 MQTT 作为遥测消息的主要协议 尤其是使用NVIDIA GeForce GTX 690进行封包加速时 效率可提升100 到120 25 XIM 公司在 2017 年开发了一个名为MQTT Buddy MQTT 客户端 26 27 iOS 和 Android 上都有该应用 但是它并没有被放到 F Droid 仓库 也就意味着它是闭源软件 该应用提供了英语 俄语 汉语三种语言界面 Node RED 支持 0 14 版本以上的 MQTT 节点 以便正确配置 TLS 连接 28 开源智慧家庭平台 Home Assistant 支持 MQTT 并为 MQTT 中间件提供了四个选项 29 30 树莓派上基于Node js 的 Pimatic 家庭自动化框架提供了 MQTT 插件来完全支持 MQTT 协议 31 McAfee OpenDXL 是基于对消息中间件本身增强的 MQTT 以便他们能够清楚地理解 DXL 消息格式 以支持如服务 请求 响应 点对点 消息传递 服务故障转移和服务区等高级功能 32 33 MQTT实现对比 编辑主条目 MQTT实现对比 名字 开发者 开发语言 类型 初次发布日期 最新发布版本 最新发布日期 许可证Adafruit IO Adafruit Ruby on Rails Node js 34 客户端 2 0 0 35 EMQX EMQ Technologies Co Ltd 36 Erlang 中间件 2016 04 13 4 2 2 37 2020 10 26 Apache许可证 2 0M2Mqtt Eclipse基金会 C 客户端 2017 05 20 4 3 0 0 38 2017 05 20 Eclipse公共许可证 1 0Machine Head ClojureWerkz 团队 Clojure Client 2013 11 03 1 0 0 39 2017 03 05 知识共享署名 3 0 Unported 许可证moquette Selva Andrea Java 中间件 2015 07 08 0 12 40 2019 03 03 Apache许可证 2 0Mosquitto Eclipse基金会 C语言 Python 中间件和客户端 2009 12 03 1 6 12a 41 2020 08 19 Eclipse公共许可证 1 0 Eclipse发行许可证 1 0 BSD Paho MQTT Eclipse基金会 C语言 C Java Javascript Python Go 客户端 2014 05 02 1 4 1 42 2019 02 25 Eclipse公共许可证 1 0 Eclipse发行许可证 1 0 BSD 43 wolfMQTT wolfSSL C语言 客户端 2015 11 06 1 7 0 44 2020 08 21 GNU通用公共许可协议 version 2MQTTRoute Bevywise Networks C语言 Python 中间件 2017 04 25 1 0 45 2017 12 19 专有许可证 46 MQTT Client Framework novastone Objective C 客户端 2015 01 22 0 15 3 47 2019 10 23 Eclipse公共许可证 1 0MqttDesk ioCtrl technologies React js Node js 客户 2021 04 12 2 1 0 48 2021 008 1 Proprietary更完整的 MQTT 库可以在 GitHub 上找到 参见 编辑Apache ActiveMQ RabbitMQ XMPP AMQP Streaming Text Oriented Messaging Protocol 英语 Streaming Text Oriented Messaging Protocol STOMP 引用 编辑 MQTT 3 1 1 specification OASIS December 10 2015 April 25 2017 原始内容存档于2021 01 08 ISO IEC 20922 2016 Information technology Message Queuing Telemetry Transport MQTT v3 1 1 iso org 国际标准化组织 June 15 2016 原始内容存档于2020 10 25 3 0 3 1 IoT 智慧製造全面升級應用 下 www lcnet com tw Smart eVision 2019 09 23 2019 12 23 原始内容存档于2020 08 10 中文 10th birthday party MQTT org July 2009 April 25 2015 原始内容存档于2018 12 14 OASIS Message Queuing Telemetry Transport MQTT Technical Committee OASIS May 9 2014 原始内容存档于2020 06 22 Stanford Clark Andy Hong Linh Truong MQTT For Sensor Networks MQTT SN Protocol Specification Version 1 2 PDF mqtt org MQTT 27 November 14 2013 May 9 2014 原始内容 PDF 存档于2013 08 12 IBM WebSphere MQ IBM November 18 2013 原始内容存档于2014 04 12 Piper Andy Choosing Your Messaging Protocol AMQP MQTT or STOMP blogs vmware com VMware Blogs 1 February 19 2013 October 23 2013 原始内容存档于2013 10 17 Shelby Zach Hartke Klaus Bormann Carsten Constrained Application Protocol CoAP RFC 7252 tools ietf org IETF 1 June 26 2014 November 15 2015 原始内容存档于2015 11 15 XMPP community InternetOfThings wiki xmpp org XMPP wiki 1 November 1 2013 May 9 2014 原始内容存档于2020 10 27 Baker Fred Meyer David Internet Protocols for the Smart Grid RFC 6272 datatracker ietf org IETF 1 June 21 2011 May 9 2014 原始内容存档于2020 10 26 DDS Portal Data Distribution Services portals omg org 2018 01 14 原始内容存档于2016 01 26 美国英语 Microsoft introduces new open source cross platform OPC UA support for the industrial Internet of Things Internet of Things Internet of Things 2016 06 23 2017 10 13 原始内容存档于2019 04 20 美国英语 Yuan Michael Getting to know MQTT IBM Developer 13 October 2019 原始内容存档于2020 12 03 MQTT v3 1 1 2020 06 30 原始内容存档于2018 02 20 FAQ Frequently Asked Questions MQTT 2020 03 19 原始内容存档于2016 10 25 美国英语 Zhang Lucy Building Facebook Messenger facebook com Engineering Facebook 1 August 12 2011 October 15 2015 原始内容存档于2015 08 19 通过维护 MQTT 连接并且通过聊天管道传递信息 能够在数百毫秒而非几秒内实现电话到电话的数据传送 Wood Daren Robson Dave Message broker technology for flexible signalling control PDF irse org IRSE 7 August 13 2012 March 31 2014 原始内容 PDF 存档于2014 03 31 Barr Jeff AWS IoT Cloud Services for Connected Devices aws amazon com Amazon Web Services 1 October 8 2015 October 21 2015 原始内容存档于2020 10 28 AWS IoT aws amazon com iot Amazon Web Services 1 July 1 2017 原始内容存档于2021 01 19 Brothers Reginald S amp T s Internet of Things Pilot Demonstrates State of the Practical dhs gov 1 January 25 2016 March 31 2016 原始内容存档于2020 10 22 OpenStack Firehose The unified message bus for Infra services docs openstack org OpenStack Infrastructure Team 1 August 30 2016 原始内容存档于2019 08 05 Coming Soon Adafruit IO blog adafruit com Adafruit Industries 1 September 16 2014 March 29 2017 原始内容存档于2020 11 27 The Internet of Things for Everyone io adafruit com Adafruit 1 July 1 2017 原始内容存档于2021 02 03 Dotchkoff Konstantin Betts Dominic Kshirsagar Dhanashri mastermanu Damaggio Elio Understanding Microsoft Azure MQTT Support docs microsoft com Microsoft 1 March 1 2017 March 29 2017 原始内容存档于2020 12 31 The story of MQTT Buddy begins mqtt ximxim com XIM Inc 1 February 24 2017 July 1 2017 原始内容存档于2017 07 23 MQTT Buddy mqtt ximxim com XIM Inc July 1 2017 原始内容存档于2018 03 21 Community staff writer Version 0 14 released nodered org blog Node RED June 14 2016 July 6 2016 原始内容存档于2018 10 21 MQTT with TLS support Home Assistant Community MQTT home assistant io Home Assistant Community August 7 2015 August 4 2017 原始内容存档于2019 06 09 Home Assistant Community MQTT Brokers home assistant io Home Assistant Community August 7 2015 August 4 2017 原始内容存档于2021 02 03 The MQTT component needs you to run an MQTT broker for Home Assistant to connect to There are four options each with various degrees of ease of setup and privacy Kail Marek pimatic mqtt pimatic org Oliver Schneider October 16 2016 August 11 2017 原始内容存档于2020 10 24 What protocol does OpenDXL use OpenDXL OpenDXL 2017 10 13 原始内容存档于2020 09 22 英语 McDonald Ted Architecture Guide McAfee Data Exchange Layer DXL PDF 永久失效連結 Overview learn adafruit com 2018 04 20 原始内容存档于2020 12 03 Adafruit IO REST API Documentation io adafruit com 2018 04 20 原始内容存档于2021 02 01 EMQ emqx io 2020 12 16 原始内容存档于2021 02 06 EMQX Releases github com 2018 10 27 原始内容存档于2021 01 25 M2MQTT Releases github com 2018 04 20 原始内容存档于2020 10 22 Machine Head clojuremqtt info 2021 02 07 原始内容存档于2020 12 01 moquette Releases github com 2020 11 16 原始内容存档于2020 12 24 Mosquitto Releases mosquitto org 2021 02 07 原始内容存档于2017 09 16 Latest Releases eclipse org projects 2018 04 20 原始内容存档于2020 10 25 Eclipse Distribution License v 1 0 eclipse org 2018 04 20 原始内容存档于2020 12 14 wolfMQTT Client Library wolfssl com 2018 04 20 原始内容存档于2020 12 04 About bevywise com 2018 04 20 原始内容存档于2020 11 24 License bevywise com 2018 04 20 原始内容存档于2020 11 24 MQTT Client Framework github com 2020 03 14 原始内容存档于2020 09 05 Cross Platform MQTT Client ioctrl com 2021 09 04 原始内容存档于2021 09 04 外部链接 编辑官方网站 页面存档备份 存于互联网档案馆 Official website of Technical Committee 页面存档备份 存于互联网档案馆 MQTT Specifications Version 5 0 2019 03 07 PDF edition 页面存档备份 存于互联网档案馆 HTML edition 页面存档备份 存于互联网档案馆 Version 3 1 1 Plus Errata 01 2015 12 10 PDF edition 页面存档备份 存于互联网档案馆 HTML edition 页面存档备份 存于互联网档案馆 Version 3 1 1 2014 10 29 PDF edition 页面存档备份 存于互联网档案馆 HTML edition 页面存档备份 存于互联网档案馆 Version 3 1 2010 PDF edition 页面存档备份 存于互联网档案馆 HTML edition 页面存档备份 存于互联网档案馆 MQTT SN Specifications Version 1 2 2013 11 14 PDF edition 页面存档备份 存于互联网档案馆 取自 https zh wikipedia org w index php title MQTT amp oldid 76797544, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。