全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
消息队列 MQ

LMQ 名词解释

更新时间:2017-12-15 20:40:09

本文主要介绍 MQTT 协议的一些基本术语以及在阿里云环境使用 MQTT 涉及到的主要概念和术语。MQTT 接入的基本概念及使用场景请参考 MQTT 微消息队列

资源类

Instance

用户申请购买 MQTT 服务的实体单元,每个 MQTT 实例都对应一个全局唯一的服务接入点 URL。使用 MQTT 前都需要在对应的 Region 申请一个实例,并使用对应的接入点来访问服务。如何申请 MQTT 实例请参考资源申请

Parent Topic

MQTT 协议基于 Pub/Sub 模型,因此任何消息都属于一个 Topic。根据 MQTT 协议,Topic 存在多级,定义第一级 Topic 为父 Topic(Parent Topic),使用 MQTT 前,该 Parent Topic 需要先在 MQ 控制台申请。

Subtopic

MQTT 的二级 Topic,甚至三级 Topic 都是父 Topic 下的子类。使用时,直接在代码里设置,无需申请。需要注意的是 MQTT 限制 Parent Topic 和 Subtopic 的总长度为64个字符,如果超出长度限制将会导致客户端异常。

Client ID

MQTT 的 Client ID 是每个客户端的唯一标识,要求全局唯一,使用相同的 Client ID 连接 MQTT 服务会被拒绝。

Client ID 由两部分组成,组织形式为 GroupID@@@DeviceID。Client ID 的长度限制为64个字符,不要使用不可见字符。

  • Group ID: 用于指定一组逻辑功能完全一致的节点共用的组名,代表一类相同功能的设备。Group ID 需要在 MQ 控制台申请方可使用,申请链接参考申请资源
  • Device ID: 每个设备独一无二的标识,由业务方自己指定。需要保证全局唯一,例如每个传感器设备的序列号。

权限类

Username

使用 MQTT 客户端收发消息时,MQ 会根据用户设置的 Username 和 Password 来进行鉴权。鉴权逻辑遵循阿里云统一的权限规范。 此处 Username 设置为阿里云的 AccessKey 即可。

Password

MQ 要求用户将 GroupID 作为签名字段,SecretKey 作为秘钥,使用 HmacSHA1 算法计算签名字符串,并将签名字符串设置到 Password 参数中用于鉴权。关于鉴权的签名计算规则请参考签名计算章节文档。 具体的代码实现可以参考各个语言版本的 demo 程序。

网络类

ServerUrl

MQ 提供的 MQTT 服务的接入点 URL,都是公网 URL,目前 MQTT 的接入除了支持标准协议的1883端口,同时还支持加密 SSL,WebSocket,Flash 等方式。接入点 URL 是在申请实例之后自动分配,请妥善保管。申请实例请参考资源申请章节。

协议相关

QoS

QoS (Quality of Service)指代消息传输的服务质量。它包括 QoS0(最多分发一次)、QoS1(至少达到一次)和 QoS2(仅分发一次)三种级别。

cleanSession

cleanSession 标志是 MQTT 协议中对一个客户端建立 TCP 连接后是否关心之前状态的定义。具体语义如下:

  • cleanSession=true:客户端再次上线时,将不再关心之前所有的订阅关系以及离线消息。
  • cleanSession=false:客户端再次上线时,还需要处理之前的离线消息,而之前的订阅关系也会持续生效。

注意:

  • MQTT 要求每个客户端每次连接时的 cleanSession 标志必须固定,不允许动态变化,否则会导致离线消息的判断有误。
  • MQTT 目前对外 QoS2 消息不支持非 cleanSession ,如果客户端以 QoS2 方式订阅消息,即使设置 cleanSession=false 也不会生效。
  • P2P 消息的 cleanSession 判断以发送方客户端的配置为准。
  • QoS 和 cleanSession 的不同组合产生的结果如下表所示:
QoS 级别 cleanSession=true cleanSession=false
QoS0 无离线消息,在线消息只尝试推一次 无离线消息,在线消息只尝试推一次
QoS1 无离线消息,在线消息保证可达 有离线消息,所有消息保证可达
QoS2 无离线消息,在线消息保证只推一次 暂不支持
本文导读目录