历史
-
1999年:MQTT最初由IBM的Andy Stanford-Clark和Cirrus Link的Arlen Nipper开发,用于满足石油和天然气公司在远程地区监控设备的需求。
-
2006年:IBM发布了MQTT的最初开源实现,但此时MQTT并未获得广泛的关注。
-
2010年:随着物联网(IoT)的兴起,MQTT开始被更广泛地采用,并逐渐有了更多的开源实现。
-
2011年:Eclipse基金会启动了Eclipse Paho项目,提供了一系列开源的MQTT客户端库,支持多种编程语言。
-
2012年:Eclipse基金会启动了Eclipse Mosquitto项目,提供了一个开源的MQTT代理(broker)实现。
-
2014年:MQTT成为OASIS标准,这标志着它的发展进入了一个新的阶段,并进一步推动了开源社区对MQTT协议的兴趣和参与。
-
2016年:MQTT 3.1.1版本被正式批准为OASIS标准,这是MQTT的第一个正式标准版本。
-
2019年:MQTT 5.0版本发布,提供了许多新特性,包括更好的错误处理、共享订阅、消息属性和增强的安全性。开源社区迅速跟进,更新了各种开源实现以支持新版本。
-
至今:MQTT的开源实现继续发展,如Eclipse Paho和Mosquitto等项目,这些项目的成功和普及直接促进了MQTT协议的广泛应用和发展。同时,其他开源项目如HiveMQ、VerneMQ等也提供了不同的功能和服务,丰富了MQTT的开源生态系统。
特点
-
轻量级:MQTT设计简洁,消息头很小,可以最小化网络带宽的使用,适合在资源受限的环境中运行,如物联网设备。
-
发布/订阅模式:MQTT使用发布/订阅消息模式,允许一个消息被发送到一个主题(topic),并且所有订阅了该主题的客户端都会收到这个消息。这种模式解耦了发布者和订阅者,提高了系统的可扩展性和灵活性。
-
服务质量(QoS)级别:MQTT支持三种不同的服务质量级别,以适应不同的网络环境和应用需求:
- QoS 0:最多一次交付。消息可能会丢失,但不会重复。
- QoS 1:至少一次交付。消息不会丢失,但可能会重复。
- QoS 2:确保一次交付。消息不会丢失也不会重复。
-
持久会话:MQTT支持持久会话,客户端可以指示代理(broker)存储其订阅信息和未确认的消息,即使客户端断开连接后重新连接,也能恢复会话状态。
-
遗嘱消息(Last Will and Testament):客户端在连接到代理时可以指定一个遗嘱消息,如果客户端非正常断开连接,代理会将这个遗嘱消息发布到指定的主题。
-
小型传输优化:MQTT协议优化了小型传输,适合在带宽有限和不稳定的网络环境中使用,如移动通信网络或卫星链路。
-
安全性:MQTT支持多种安全性选项,包括使用TLS(Transport Layer Security)加密传输,以确保数据的安全和隐私。
-
跨平台兼容性:MQTT可以在多种平台上运行,包括嵌入式系统、服务器、移动设备等,支持多种编程语言。
-
易于使用和集成:MQTT的简单性和灵活性使其易于集成到现有的系统和应用程序中,同时也便于开发者快速上手和使用。
-
社区支持和开源实现:MQTT有广泛的社区支持,并且有多种开源实现,如Eclipse Paho和Mosquitto,这些实现提供了客户端和代理的代码,可以自由使用和修改。
-
适应性强:MQTT协议可以适应各种网络环境和应用场景,包括物联网、移动应用、智能家居、工业自动化等。
-
可扩展性:MQTT协议设计允许通过添加新的功能和服务来扩展协议,以适应未来的需求和发展
MQTT 5.0 与 3.1.1的区别
MQTT 5.0是MQTT协议的第四个正式版本,它在2019年发布,提供了许多新特性和改进,与之前的3.1.1版本相比,MQTT 5.0在性能、功能和安全方面都有显著的提升。以下是MQTT 5.0与3.1.1版本之间的一些主要区别:
-
增强的认证和授权:MQTT 5.0提供了更灵活的认证和授权机制,支持多种认证方法。
-
消息和主题属性:MQTT 5.0增加了对消息和主题属性的支持,允许在发布消息时附加额外的元数据。
-
共享订阅:MQTT 5.0允许客户端通过共享订阅的方式来订阅主题,以提高系统的可扩展性和性能。
-
响应信息:MQTT 5.0支持响应信息,允许客户端在发布消息时请求一个响应。
-
改进的会话管理:MQTT 5.0提供了更精细的会话管理控制,包括会话过期的设置和会话终结的原因。
-
增强的错误报告:MQTT 5.0增加了更多的错误代码和原因字符串,使得错误报告更加详细和有用。
-
消息重传:MQTT 5.0在QoS 1和QoS 2中引入了消息重传机制,以提高消息的可靠传输。
-
流量控制:MQTT 5.0提供了流量控制功能,以避免过载。
-
用户属性:MQTT 5.0允许在连接、发布、订阅等操作中添加用户属性,以提供额外的上下文信息。
-
更好的性能和可扩展性:MQTT 5.0在设计上考虑了更好的性能和可扩展性,以适应未来的需求和发展。
-
兼容性:虽然MQTT 5.0引入了许多新特性,但它仍然保持了与3.1.1版本的兼容性。
MQTT 常用的服务器
MQTT服务器(也称为MQTT代理或MQTT broker)是MQTT(Message Queuing Telemetry Transport)协议中的核心组件,负责接收客户端的连接请求、处理客户端的订阅和发布消息请求,并将消息路由到相应的订阅者。以下是几种常用的MQTT服务器:
-
Eclipse Mosquitto:这是一个开源的MQTT服务器,由Eclipse基金会维护。它支持MQTT 3.1、3.1.1和5.0版本,具有高度的可扩展性和可靠性,适用于各种规模的部署。
-
HiveMQ:这是一个商业化的MQTT服务器,提供企业级的功能和性能。HiveMQ支持MQTT 3.1、3.1.1和5.0版本,并且提供了丰富的插件和扩展功能。
-
IBM MQTT Server:这是IBM提供的一个MQTT服务器,支持MQTT 3.1和3.1.1版本。它提供了高可用性和安全性,并且可以与其他IBM产品集成。
-
VerneMQ:这是一个由Erlang社区开发的MQTT服务器,支持MQTT 3.1、3.1.1和5.0版本。它具有高可用性和可扩展性,并且支持多种认证和授权机制。
-
EMQX:这是一个由EMQ公司开发的MQTT服务器,支持MQTT 3.1、3.1.1和5.0版本。它提供了丰富的插件和扩展功能,以及高可用性和安全性。//有大量的中文资料并且开源
官网
Eclipse Mosquitto™ 开源 MQTT 代理
EMQX官网
MQTT 发布/订阅模式介绍
发布者(Publisher)//发信息
- 发布消息:发布者是发送消息的客户端,它将消息发布到一个特定的主题(Topic)。
- QoS级别:发布者可以选择不同的服务质量级别(QoS Levels),以控制消息的可靠传输:
- QoS 0:最多一次(At Most Once) - 消息可能会丢失,但不会重复发送。
- QoS 1:至少一次(At Least Once) - 消息不会丢失,但可能会重复发送。
- QoS 2:精确一次(Exactly Once) - 消息不会丢失也不会重复发送。
订阅者(Subscriber)//接收信息
- 订阅主题:订阅者是接收消息的客户端,它可以订阅一个或多个主题。
- 接收消息:订阅者会接收所有发布到其订阅主题的消息。
- QoS级别:订阅者也可以指定它希望接收消息的QoS级别。
代理(Broker)//服务器
- 消息路由:代理是MQTT的核心组件,负责接收发布者的消息,并将消息路由到订阅该主题的订阅者。
- 持久会话:代理可以存储订阅者和发布者的会话信息,以便在网络断开后重新连接时恢复会话状态。
遗嘱消息(Last Will and Testament)
- 发布遗嘱:当客户端断开连接时,如果配置了遗嘱消息,代理会发布一个消息到指定的主题,通知其他客户端该客户端已经断开。
主题(Topic)
- 主题是 MQTT 进行消息路由的基础,它类似 URL 路径,使用斜杠 / 进行分层,比如 sensor/1/temperature。一个主题可以有多个订阅者,代理会将该主题下的消息转发给所有订阅者;一个 主题也可以有多个发布者,代理将按照消息到达的顺序转发。