首页

MQTT 与消息队列的很多行为和特性非常接近,比如都采用发布/订阅模式,但是他们面向的场景却有着显著的不同。
消息队列主要用于服务端应用之间的消息存储与转发,这类场景往往数据量大但客户端数量少。
MQTT 是一种消息传输协议,主要用于物联网设备之间的消息传递,这类场景的特点是海量的设备接入、管理与消息传输。
在一些实际的应用场景中,MQTT 与消息队列往往会被结合起来使用,以使 MQTT 服务器能专注于处理设备的连接与设备间的消息路由。
比如先由 MQTT 服务器接收物联网设备上报的数据,然后再通过消息队列将这些数据转发到不同的业务系统进行处理。
不同于消息队列,MQTT 主题不需要提前创建。MQTT 客户端在订阅或发布时即自动的创建了主题,开发者无需再关心主题的创建,并且也不需要手动删除主题
在 MQTT 3.1.1 发布并成为 OASIS 标准的四年后,MQTT 5.0 正式发布。
MQTT 5.0 在 3.1.1 版本基础上增加了
会话/消息延时、原因码、主题别名、用户属性、共享订阅等更加符合现代物联网应用需求的特性,
提高了大型系统的性能、稳定性与可扩展性。
在线状态感知
为了应对网络不稳定的情况,MQTT 提供了心跳保活(Keep Alive)机制。
在客户端与服务端长时间无消息交互的情况下,Keep Alive 保持连接不被断开,若一旦断开,客户端可即时感知并立即重连。
MQTT 设计了遗愿(Last Will)消息,让服务端在发现客户端异常下线的情况下,帮助客户端发布一条遗愿消息到指定的 MQTT 主题。
依赖于发布订阅模式,MQTT 允许在设备和云之间进行双向消息通信。
发布订阅模式的优点在于:发布者与订阅者不需要建立直接连接,也不需要同时在线,而是由消息服务器负责所有消息的路由和分发工作。
据 IoT Analytics 最新发布的《2022 年春季物联网状况》研究报告显示,
到 2022 年,物联网市场预计将增长 18%,达到 144 亿活跃连接。
在如此大规模的物联网需求下,海量的设备接入和设备管理对网络带宽、通信协议以及平台服务架构都带来了巨大的挑战。
对于物联网协议来说,必须针对性地解决物联网设备通信的几个关键问题:网络环境复杂而不可靠、内存和闪存容量小、处理器能力有限。
MQTT 协议正是为了应对以上问题而创建,
经过多年的发展凭借其轻量高效、可靠的消息传递、海量连接支持、安全的双向通信等优点已成为物联网行业的首选协议
MQTT协议版本
MQTT 5 
MQTT 3.1.1 
MQTT 3.1 
MQTT-SN v1.2
Netty零拷贝体现在三个方面:
Direct Buffers
Composite Buffers
FileChannel.transferTo
使用直接缓冲区的风险
allocating many short-lived direct NIO buffers often causes an OutOfMemoryError.
MQTT 提供了遗嘱 Will 功能,可以在终端异常下线时,
向特定的 Will Topic 发送指定的 Will Message, 从而让第三方感知终端的异常下线。
Moquette是一个开源的MQTT消息代理,基于Java开发,并且使用Netty来实现MQTT协议。
它支持MQTT协议的3.1.1版本,适用于物联网(IoT)场景中的低带宽、高延迟或不可靠的网络环境。
Moquette的设计目标是轻量级和易于嵌入到其他项目中

第一页 上一页 下一页 最后一页