MQTT(Message Queue Telemetry Transport)是一种轻量级的消息传递协议,主要用于物联网设备之间的通信。在MQTT协议中,消息的顺序不是严格保证的。
因为MQTT协议的设计目标是高效、低延迟的通信,它采用了异步、非阻塞的通信方式,消息可以在网络中以任意顺序进行传递。在实际应用中,由于消息传递的时间和网络状况等因素的影响,消息的顺序可能会发生变化,甚至可能会丢失。
为了解决这个问题,MQTT协议提供了消息保留(Retained Messages)和服务质量(Quality of Service,QoS)等功能。通过使用这些功能,可以确保消息的可靠传递和顺序性。
消息保留功能可以让MQTT服务器在订阅主题时将最新的消息保留下来,当有新的订阅者加入时,可以立即推送最新的消息给新订阅者,保证消息的顺序性。
在MQTT协议中,保证消息顺序需要依靠消息保留和QoS等功能,但是由于消息传递是异步非阻塞的,消息的顺序并不能得到完全的保证。在设计MQTT应用时,需要根据实际情况选择合适的QoS等级,并结合实际业务需求进行消息的保留和处理,以确保消息的可靠性和顺序性。
消息队列RocketMQ版是阿里云基于Apache RocketMQ构建的低延迟、高并发、高可用、高可靠的分布式“消息、事件、流”统一处理平台,面向互联网分布式应用场景提供微服务异步解耦、流式数据处理、事件驱动处理等核心能力。
微消息队列MQTT版:面向移动端场景,移动端场景一般都具备海量设备,单设备数据较少的特点。因此,微消息队列MQTT版适用于拥有大量在线客户端(很多企业设备端过万,甚至上百万),但每个客户端消息较少的场景。
消息队列RocketMQ版:面向服务端的消息引擎,主要用于服务组件之间的解耦、异步通知、削峰填谷等,服务器规模较小(极少企业服务器规模过万),但需要大量的消息处理,吞吐量要求高。因此,消息队列RocketMQ版适用于服务端进行大批量的数据处理和分析的场景。
MQTT 与消息队列有一定的区别,队列是一种先进先出的数据结构,消息队列常用于应用服务层面。
MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:
1、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;,MQTT 是传输协议,
2、对负载内容屏蔽的消息传输;
3、使用 TCP/IP 提供网络连接;
4、有三种消息发布服务质量:
“至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次记录无所谓,因为不久后还会有第二次发送。
“至少一次”,确保消息到达,但消息重复可能会发生。
“只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
5、小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;
6、使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/