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