本文针对使用云消息队列 RocketMQ 版SDK与云消息队列 MQTT 版交互的场景,提供交互中所涉及的消息结构和属性字段的映射关系,方便您更好的理解和组合使用这两个产品。
云消息队列 MQTT 版是一款面向移动端的网关产品,可通过数据互通规则实现与其他阿里云产品,例如云消息队列 RocketMQ 版的交互。规则的详细信息,请参见规则管理。
如果单独使用云消息队列 MQTT 版,则无需关注本文提供的映射关系,一切遵循标准MQTT协议规范即可。
云消息队列 MQTT 版的详细介绍,请参见什么是云消息队列 MQTT 版和名词解释。
消息结构映射
云消息队列 MQTT 版和云消息队列 RocketMQ 版都是基于发布/订阅(Pub/Sub)模型的消息系统,两者概念上存在很多相似之处,下图列举了关键概念的区别和映射关系。
如上图所示,在云消息队列 MQTT 版中Topic是多级结构,而云消息队列 RocketMQ 版的Topic仅有一级,因此,云消息队列 MQTT 版中的一级Topic映射到云消息队列 RocketMQ 版的Topic,而子级Topic,包括二级、三级、n级Topic则映射到云消息队列 RocketMQ 版的消息属性(Properties)中。
云消息队列 RocketMQ 版协议中的消息(Message)可以拥有自定义属性(Properties),而MQTT协议目前的版本不支持属性,但为了方便溯源MQTT协议中的Header信息和设备信息,云消息队列 MQTT 版的部分信息将被映射到云消息队列 RocketMQ 版的消息属性中,方便使用云消息队列 RocketMQ 版的SDK接入的用户获取。
在云消息队列 RocketMQ 版中设置属性字段来映射云消息队列 MQTT 版的具体步骤,请参见下文属性字段映射的表格。
云消息队列 RocketMQ 版和云消息队列 MQTT 版的消息负载(Payload)均是您的业务消息的数据序列化结果,云消息队列 RocketMQ 版和云消息队列 MQTT 版不会对业务消息再做进一步的编解码处理。
属性字段映射
目前,云消息队列 MQTT 版和云消息队列 RocketMQ 版支持的属性字段映射关系如下表所示。使用云消息队列 RocketMQ 版和云消息队列 MQTT 版的SDK的应用交互时,可以通过读写这些属性字段来设置或获取信息。
QoS、cleanSession、Topic以及Client ID的详细解释,请参见名词解释。
MQTT参数 | RocketMQ属性Key | 属性可选值 | 说明 |
QoS | qoslevel | 0、1、2 | 云消息队列 RocketMQ 版发给云消息队列 MQTT 版消息时可以设置,如果不设置,默认为“1”; 云消息队列 MQTT 版发给云消息队列 RocketMQ 版的消息可以直接读取。 |
MQTT全量Topic | topic | 具体的全量Topic字符串 | 不可设置,云消息队列 MQTT 版发给云消息队列 RocketMQ 版消息时,用于追踪该消息的发送源的全量Topic。 |
cleanSession | cleansessionflag | true、false | 云消息队列 RocketMQ 版发给云消息队列 MQTT 版客户端P2P消息时设置,如不设置,默认为“true”; 其他消息不可以设置,云消息队列 MQTT 版发给云消息队列 RocketMQ 版的消息可以直接读取。 |
MQTT子级Topic | mqttSecondTopic | 具体的子级Topic字符串 | 云消息队列 RocketMQ 版发给云消息队列 MQTT 版客户端消息时如果需要子级Topic来做过滤,则设置,如不设置,默认为空; 云消息队列 MQTT 版发给云消息队列 RocketMQ 版的消息可以直接读取。 |
客户端接收消息显示Topic | mqttRealTopic | 业务上希望客户端收到消息时显示的子级字符串 | 云消息队列 RocketMQ 版发给云消息队列 MQTT 版客户端消息时如果希望客户端收到消息后显示成指定的子级Topic名称,则可以设置;一般用于P2P消息,若不设置,P2P消息默认使用自己固定的Topic; 云消息队列 MQTT 版发给云消息队列 RocketMQ 版的消息时无该属性。 |
clientId | clientId | 具体的Client ID字符串 | 不可设置,云消息队列 MQTT 版发给云消息队列 RocketMQ 版消息时,用于追踪该消息的发送源的Client ID。 |