微消息队列 MQTT 版将于 2019 年 12 月 19 日开启地域化访问校验。开启后,跨地域(Region)地使用微消息队列 MQTT 版 Topic 与消息队列 RocketMQ 版 Topic 收发消息将会报错。本文提供正确使用微消息队列 MQTT 版和消息队列 RocketMQ 版的 Topic 来收发消息的详细说明。若您已使用跨地域的方式,也可通过本文提供的 Topic 热迁移更正步骤及时修正。
背景信息
如需使用微消息队列 MQTT 版来收发消息,需绑定一个后端存储实例(消息队列 MQ 实例)。消息存储实例目前只支持消息队列 RocketMQ 版。微消息队列 MQTT 版与消息队列 RocketMQ 版的 Topic 映射关系如下所示。
如上图所示,在微消息队列 MQTT 版中 Topic 是多级结构,而消息队列 RocketMQ 版的 Topic 仅有一级,因此,微消息队列 MQTT 版中的一级 Topic 映射到消息队列 RocketMQ 版的 Topic,而二级和三级 Topic 则映射到消息队列 RocketMQ 版的消息属性(Properties)中。
多级子 Topic 无需创建,直接在代码中使用即可。更多信息请参见 MQTT 与 RocketMQ 的消息结构映射。
您在使用微消息队列 MQTT 版 SDK 与消息队列 RocketMQ 版 SDK 互相收发消息时,需特别注意的是,以下参数所对应的资源应在同一地域。
- clientId:由 Group ID 和 Device ID 拼接而成,其中 Group ID 在微消息队列 MQTT 版控制台上创建。详情参见名词解释。
- parentTopic:您在微消息队列 MQTT 版控制台上创建的父 Topic,对应消息队列 RocketMQ 版实例的 Topic。
- endPoint:您从微消息队列 MQTT 版控制台的实例详情页面获取的接入点。
- instanceId:您购买的微消息队列 MQTT 版实例的 ID,可在微消息队列 MQTT 版控制台实例详情页面获取。
例如您在华东1(杭州)地域分别购买了一个微消息队列 MQTT 版实例 A 和消息队列 RocketMQ 版实例 A,绑定了这两个实例,并在此地域下为这两个实例分别创建了 Topic A 和 Group ID A;同时,您也在另一个地域,如华南1(深圳)分别购买了另一组微消息队列 MQTT 版实例 B 和消息队列 RocketMQ 版实例 B,绑定了这两个实例,并在此地域下为这两个实例分别创建了 Topic B 和 Group ID B。需特别注意以下几点:
- 针对位于华东1(杭州)地域的微消息队列 MQTT 版实例 A 的 Topic A,消息只能发往该实例绑定的、位于华东1(杭州)地域的消息队列 RocketMQ 版实例 A 的 Topic A。
- 针对位于华南1(深圳)地域的微消息队列 MQTT 版实例 B 的 Topic B,消息只能发往微消息队列 MQTT 版实例 B 绑定的、位于华南1(深圳)地域的消息队列 RocketMQ 版实例 B 的 Topic B。
注意 切忌将 Topic A 的消息通过跨地域的方式,发往位于华南1(深圳)地域的消息队列 RocketMQ 版实例 B,或将 Topic B 的消息通过跨地域的方式,发往位于华东1(杭州)地域的消息队列 RocketMQ 版实例 A。
具体对应关系如下图所示。
说明 x 表示错误用法;√ 表示正确用法。
如上图所示:
- 针对微消息队列 MQTT 版所创建的 Group ID、Topic 以及实例应在同一地域。
- 微消息队列 MQTT 版实例需与同地域的消息队列 RocketMQ 版实例绑定。
- 绑定后的微消息队列 MQTT 版和消息队列 RocketMQ 版实例对应的 Topic 需在同一地域。
正确配置 Topic 操作步骤
正确配置 Topic 来收发消息的步骤请参见 MQTT 快速入门。
热迁移 Topic 操作步骤
如果您目前已通过跨地域的方式实现微消息队列 MQTT 版和后端消息队列 RocketMQ 版 Topic 间的消息收发,则可根据业务对消息收发报错的敏感度来执行以下操作,及时修正。
- 如果敏感度低,请确认微消息队列 MQTT 版客户端实际需要访问的地域和消息队列 RocketMQ 版实例。确认好后,删除当前错误使用的 Topic,并在目标地域和消息队列 RocketMQ 版实例下重新创建同名 Topic。
- 如果敏感度高,请提交工单由消息队列 MQ 的技术支持工程师协助您进行 Topic 热迁移。
原创文章,作者:网友投稿,如若转载,请注明出处:https://www.cloudads.cn/archives/33557.html