全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 阿里云办公 培训与认证 物联网
消息队列 MQ

LMQ 名词解释

更新时间:2017-09-12 16:59:07

本文主要介绍 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 无离线消息,在线消息保证只推一次 暂不支持
本文导读目录