本文针对使用消息队列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版的具体步骤,请参见下文属性字段映射的表格。

消息队列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。