MQTT

维基百科,自由的百科全书
跳到导航 跳到搜索

MQTT[1](消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)[2]下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件

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

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

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

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

连接[编辑]

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

断开连接[编辑]

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

发布[编辑]

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

服务品质(QOS)[编辑]

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

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

  1. 最多一次传送 (只负责传送,发送过后就不管数据的传送情况)
  2. 至少一次传送 (确认数据交付)
  3. 正好一次传送 (保证数据交付成功)

现实世界的应用程序[编辑]

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

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

MQTT实现对比[编辑]

名字 开发者 开发语言 类型 初次发布日期 最新发布版本 最新发布日期 许可证
Adafruit IO Adafruit Ruby on Rails, Node.js[30] 客户端 ? 2.0.0[31] ? ?
EMQX Feng Lee Erlang 中间件 2016-04-13 3.0[32] 2018-10-27 Apache许可证 2.0
M2Mqtt Eclipse基金会 C# 客户端 2017-05-20 4.3.0.0[33] 2017-05-20 Eclipse公共许可证 1.0
Machine Head ClojureWerkz 团队 Clojure Client 2013-11-03 1.0.0[34] 2017-03-05 知识共享署名 3.0 Unported 许可证
moquette Selva, Andrea Java 中间件 2015-07-08 0.10[35] 2017-06-30 Apache许可证 2.0
Mosquitto Eclipse基金会 C语言, Python 中间件和客户端 2009-12-03 1.4.15[36] 2018-02-27 Eclipse公共许可证 1.0, Eclipse发行许可证 1.0 (BSD)
Paho MQTT Eclipse基金会 C语言, C++, Java, Javascript, Python, Go 客户端 2014-05-02 1.3.0[37] 2017-06-28 Eclipse公共许可证 1.0, Eclipse发行许可证 1.0 (BSD)[38]
wolfMQTT wolfSSL C语言 客户端 2015-11-06 0.14[39] 2017-11-22 GNU通用公共许可协议, version 2
MQTTRoute Bevywise Networks C语言, Python 中间件 2017-04-25 1.0[40] 2017-12-19 专有许可证[41]

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

参见[编辑]

引用[编辑]

  1. ^ MQTT 3.1.1 specification. OASIS. December 10, 2015 [April 25, 2017]. 
  2. ^ ISO/IEC 20922:2016 Information technology -- Message Queuing Telemetry Transport (MQTT) v3.1.1. iso.org. 国际标准化组织. June 15, 2016. 
  3. ^ 10th birthday party. MQTT.org. July 2009 [April 25, 2015]. 
  4. ^ OASIS Message Queuing Telemetry Transport (MQTT) Technical Committee. OASIS. [May 9, 2014]. 
  5. ^ 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]. 
  6. ^ IBM WebSphere MQ. IBM. [November 18, 2013]. 
  7. ^ Piper, Andy. Choosing Your Messaging Protocol: AMQP, MQTT, or STOMP. blogs.vmware.com. VMware Blogs: 1. February 19, 2013 [October 23, 2013]. 
  8. ^ Shelby, Zach; Hartke, Klaus; Bormann, Carsten. Constrained Application Protocol (CoAP) RFC 7252. tools.ietf.org. IETF: 1. June 26, 2014 [November 15, 2015]. 
  9. ^ XMPP community. InternetOfThings. wiki.xmpp.org. XMPP wiki: 1. November 1, 2013 [May 9, 2014]. 
  10. ^ Baker, Fred; Meyer, David. Internet Protocols for the Smart Grid RFC 6272. datatracker.ietf.org. IETF: 1. June 21, 2011 [May 9, 2014]. 
  11. ^ DDS Portal – Data Distribution Services. portals.omg.org. [2018-01-14] (美国英语). 
  12. ^ 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] (美国英语). 
  13. ^ Zhang, Lucy. Building Facebook Messenger. facebook.com/Engineering. Facebook: 1. August 12, 2011 [October 15, 2015]. 通过维护 MQTT 连接并且通过聊天管道传递信息,能够在数百毫秒而非几秒内实现电话到电话的数据传送。 
  14. ^ Wood, Daren; Robson, Dave. Message broker technology for flexible signalling control (PDF). irse.org. IRSE: 7. August 13, 2012 [March 31, 2014]. 
  15. ^ Barr, Jeff. AWS IoT - Cloud Services for Connected Devices. aws.amazon.com. Amazon Web Services: 1. October 8, 2015 [October 21, 2015]. 
  16. ^ AWS IoT. aws.amazon.com/iot. Amazon Web Services: 1. [July 1, 2017]. 
  17. ^ Brothers, Reginald. S&T’s Internet of Things Pilot Demonstrates 'State of the Practical'. dhs.gov: 1. January 25, 2016 [March 31, 2016]. 
  18. ^ OpenStack Firehose - The unified message bus for Infra services. docs.openstack.org. OpenStack Infrastructure Team: 1. [August 30, 2016]. 
  19. ^ Coming Soon: Adafruit IO. blog.adafruit.com. Adafruit Industries: 1. September 16, 2014 [March 29, 2017]. 
  20. ^ The Internet of Things for Everyone. io.adafruit.com. Adafruit: 1. [July 1, 2017]. 
  21. ^ 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]. 
  22. ^ The story of MQTT Buddy begins!. mqtt.ximxim.com. XIM, Inc.: 1. February 24, 2017 [July 1, 2017]. (原始内容存档于2017-07-23). 
  23. ^ MQTT Buddy. mqtt.ximxim.com. XIM, Inc. [July 1, 2017]. (原始内容存档于2018-03-21). 
  24. ^ Community staff writer. Version 0.14 released. nodered.org/blog. Node-RED. June 14, 2016 [July 6, 2016]. MQTT with TLS support 
  25. ^ Home Assistant Community. MQTT. home-assistant.io. Home Assistant Community. August 7, 2015 [August 4, 2017]. 
  26. ^ Home Assistant Community. MQTT Brokers. home-assistant.io. Home Assistant Community. August 7, 2015 [August 4, 2017]. 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. 
  27. ^ Kail, Marek. pimatic-mqtt. pimatic.org. Oliver Schneider. October 16, 2016 [August 11, 2017]. 
  28. ^ What protocol does OpenDXL use? - OpenDXL. OpenDXL. [2017-10-13] (英语). 
  29. ^ McDonald, Ted. Architecture Guide McAfee Data Exchange Layer (DXL) (PDF). [永久失效链接]
  30. ^ Overview. learn.adafruit.com. 
  31. ^ Adafruit IO REST API Documentation. io.adafruit.com. 
  32. ^ EMQX Releases. github.com. 
  33. ^ M2MQTT Releases. github.com. 
  34. ^ Machine Head. clojuremqtt.info. 
  35. ^ moquette Releases. github.com. 
  36. ^ Version 1.4.15 released. mosquitto.org. 
  37. ^ Latest Releases. eclipse.org/projects. 
  38. ^ Eclipse Distribution License - v 1.0. eclipse.org. 
  39. ^ wolfMQTT Client Library. wolfssl.com. 
  40. ^ About. bevywise.com. 
  41. ^ License. bevywise.com. 

外部链接[编辑]