微消息队列 MQTT 版是专为移动互联网(MI)、物联网(IoT)领域设计的消息产品,覆盖互动直播、金融支付、智能餐饮、即时聊天、移动 Apps、智能设备、车联网等多种应用场景;通过对 MQTT、WebSocket 等协议的全面支持,连接端和云之间的双向通信,实现 C2C、C2B、B2C 等业务场景之间的消息通信,可支撑千万级设备与消息并发,如果说传统的消息队列中间件一般应用于微服务之间,那么适用于物联网的微消息队列 MQTT 版则实现了端与云之间的消息传递和真正意义上的万物互联。。
产品优势
微消息队列 MQTT 版相当于一个具备无限扩展能力的连接网关,不仅提供了自闭环的消息收发和存储能力,还提供了规则转入转出能力。您可以通过配置规则搭配阿里云其他产品,例如传统服务端消息中间件(消息队列 RocketMQ 版、消息队列 Kafka 版等)来实现云和端的数据双向互通。
微消息队列 MQTT 版系统采用分布式理念进行设计,无单点瓶颈,各组件之间均可以无限水平扩展,保证容量可以随着您的在线使用量进行调整,并且对用户完全透明。
下图展示了微消息队列 MQTT 版的产品优势。
图 1. 产品优势
相比其他移动端消息服务,微消息队列 MQTT 版具有以下优势:
- 支持的都是标准协议,例如 MQTT、STOMP,应用方无技术捆绑,使用绝大多数开源的 SDK 即可无缝迁移到云上。
- 作为一个海量移动终端长连接网关,后端通过规则引擎和阿里云其他消息产品数据打通,应用可以无需搭建自己的网关即可实现端和云的双向通信。
- 支持设备级权限控制,并支持 SSL/TLS 加密通信,数据传输更安全可靠。
下面介绍一下微消息队列 MQTT 版和传统消息中间件,例如消息队列 RocketMQ 版的关联和区别,并针对实际应用场景下的产品选型给出建议。
背景信息
传统的消息中间件,例如消息队列 RocketMQ 版、消息队列 Kafka 版等都是面向微服务大数据等领域,负责消息的存储和转发,消息的生产者和消费者都是服务端应用。
这种设计很适合服务端技术栈固定、语言平台固定的场景。而移动互联网和 IoT 领域则有所不同,这类场景更侧重于多语言多平台的海量设备接入,消息的生产和消费过程的业务属性很突出,传统的消息中间件并不适合这些领域。
秉承单一职责的原则,微消息队列 MQTT 版在设计上是一个面向移动互联网和 IoT 领域的无状态网关,只关心海量移动端设备的接入、管理和消息传输,可与其他阿里云产品通过数据互通规则实现交互,例如消息队列 RocketMQ 版。
在这种职责划分下,终端设备将消息发送到微消息队列 MQTT 版后,消息会根据微消息队列 MQTT 版创建的规则路由到指定产品,云端应用依然可以维持传统的微服务开发方案,通过对接云端存储产品即可和终端设备进行互动,两者之间通过微消息队列 MQTT 版实现了数据互通能力。
适用场景对比
在一个业务场景中,可能包含多种不同类型的应用组件,每个组件承担不同的角色。因此,在方案选型时如需要使用到消息产品,需要先了解微消息队列 MQTT 版和传统消息中间件的关联和区别,合理搭配使用,例如组件 A 的消息收发使用微消息队列 MQTT 版,组件 B 的消息收发使用消息队列 RocketMQ 版。
下文将根据场景举例描述微消息队列 MQTT 版和传统的消息中间件的区别,为方便描述,传统的消息中间件以消息队列 RocketMQ 版为例,其他产品例如消息队列 Kafka 版和消息队列 AMQP 版(RabbitMQ)同理。
产品名 | 适用场景 |
---|---|
微消息队列 MQTT 版 |
面向移动端场景,移动端场景一般都具备海量设备,单设备数据较少的特点。因此,微消息队列 MQTT 版适用于拥有大量在线客户端(很多企业设备端过万,甚至上百万),但每个客户端消息较少的场景。 |
消息队列 RocketMQ 版 | 面向服务端的消息引擎,主要用于服务组件之间的解耦、异步通知、削峰填谷等,服务器规模较小(极少企业服务器规模过万),但需要大量的消息处理,吞吐量要求高。因此,消息队列 RocketMQ 版适用于服务端进行大批量的数据处理和分析的场景。 |
组合使用场景示例
- 场景示例一
在物联网 IoT 场景中,成千上万(甚至数百万)规模的设备传感器可使用微消息队列 MQTT 版上传数据,需做数据分析的服务端(即部署在服务器上的应用)则可以通过消息队列 RocketMQ 版完成数据的分析与处理。
- 场景示例二
在车联网场景中,上百万辆车需要上传车辆信息数据到云端(服务端),云端同时也会下发指令到任意车辆或广播到所有的车辆。车辆可以通过 MQTT SDK 连接到微消息队列 MQTT 版实现数据上报以及指令接收,监管系统(数据分析系统)可以通过消息队列 RocketMQ 版的 SDK 进行消息订阅以及指令下发。如下图所示。
基于以上区别,推荐您在移动端设备上使用微消息队列 MQTT 版,而在服务端应用中则使用消息队列 RocketMQ 版(或者其他消息产品)。
功能对比
微消息队列 MQTT 版和消息队列 RocketMQ 版的具体功能特性的对比如下。
功能特性 | 微消息队列 MQTT 版 | 消息队列 RocketMQ 版 |
---|---|---|
客户端连接数 | 客户端规模庞大,百万甚至千万级。 | 一般服务器规模较小,极少数万级。 |
单客户端消息量 | 单个客户端需要处理的消息少,一般定时收发消息。 | 单个客户端处理消息量大,注重吞吐量。 |
部署场景 | 移动设备、App 软件、H5 页面等。 | 服务端应用。 |
消费模式 | 支持广播模式。 | 支持集群消费和广播消费。 |
顺序支持 | 只支持上行顺序,不支持下行顺序(后续开放)。 | 支持上行和下行顺序。 |
多语言/系统支持(TCP 协议) | 支持 Java、C、C++、.NET、Android、iOS、Python、JS、Go 等多种语言和系统。 | 支持 Java、C++、.NET。 |
访问凭证 | 支持 RAM 主子账号授权和 MQTT Token 的临时访问模式,详情请参见鉴权概述。 | 支持 RAM 主子账号授权和 跨云账号授权(STS 临时授权访问)。 |
选型指导
基本原则总结如下:
- 对于部署在服务器上的应用,推荐使用消息队列 RocketMQ 版接入。
- 对于部署在移动终端、App 或浏览器页面等平台上的应用,推荐使用微消息队列 MQTT 版接入。
针对常见的应用场景,建议的微消息队列 MQTT 版和消息队列 RocketMQ 版选型如下。
场景 | 部署端 | 微消息队列 MQTT 版 | 消息队列 RocketMQ 版 |
---|---|---|---|
设备端上报状态数据 | 移动终端 | √ | × |
接收并处理分析设备的上报数据 | 移动终端 | × | √ |
对多个设备下发控制指令 | 服务器 | × | √ |
直播、弹幕、聊天 App 收发消息 | 应用 | √ | × |
服务端接收并分析聊天消息 | 服务器 | × | √ |
√ 表示建议使用该消息队列产品;× 表示不建议使用该消息队列产品。