有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
文档中心 > 消息队列 CMQ > 迁移说明 > CMQ 队列迁移至 TDMQ CMQ 版

操作场景

本文以一个 Java 客户端为例,为您介绍将 CMQ 队列迁移至 TDMQ CMQ 版的操作步骤。
迁移原理



方案总览



整体流程
1. 在控制台上将 CMQ 的队列和主题元数据迁移至 TDMQ CMQ 版中。
2. 旧的消费者保持不动,消费端新建消费者,接入到 TDMQ CMQ 版的队列中。
3. 生产者停止向原 CMQ 队列生产消息,并切换生产流接入到 TDMQ CMQ 版队列中。
4. 旧的消费者继续消费原 CMQ 队列中的存量消息,消费完成后下线 CMQ 业务消费者。

前提条件

参见 SDK 文档 部署好 CMQ 队列的生产端和消费端服务,并且运行正常。以下迁移步骤以 TCP SDK 为例。
说明
基础网络产品已下线,请您先将客户端迁移到 VPC网络环境下再进行迁移工作,详情参考基础 网络下线通知

操作步骤

步骤1:迁移元数据

1. 登录 CMQ 控制台
2. 在左侧导航栏选择队列,选择好地域后,单击页面上方的基础数据迁移
3. 在弹出的窗口中单击启动,将该地域下的所有队列和主题元数据迁移至 TDMQ CMQ 版中。


4. 迁移完成后,登录 TDMQ 控制台
5. 在左侧导航栏选择队列服务,选择相同的地域可看到迁移到 TDMQ CMQ 版的队列。



步骤2:新建消费者

1. 在消费端新建一个消费者,并接入到 TDMQ CMQ 版队列中。
Consumer consumer = new Consumer();
// 私有网络地址: http://{region}.mqadapter.cmq.tencentyun.com 支持腾讯云私有网络的云服务器内网访问
// 公网地址: https://cmq-{region}.public.tencenttdmq.com
consumer.setNameServerAddress("http://****.com");
// 设置SecretId,在控制台上获取,必须设置
consumer.setSecretId("****");
// 设置SecretKey,在控制台上获取,必须设置
consumer.setSecretKey("****");
// 设置签名方式,可以不设置,默认为SHA1
consumer.setSignMethod(ClientConfig.SIGN_METHOD_SHA256);
// 批量拉取时最大拉取消息数量,范围为1-16
consumer.setBatchPullNumber(16);
// 设置没有消息时等待时间,默认10s。可在consumer.receiveMsg等方法中传入具体的等待时间
consumer.setPollingWaitSeconds(6);
// 设置请求超时时间, 默认3000ms
// 如果设置了没有消息时等待时间为6s,超时时间为5000ms,则最终超时时间为(6*1000+5000)ms
consumer.setRequestTimeoutMS(5000);
// 消息拉取的队列名称
final String queue = "****";
NameServerAddress:API 调用地址,在 TDMQ CMQ 版控制台队列服务 > API请求地址处复制。


SecretId、SecretKey:云API密钥,登录 访问管理控制台,在访问密钥 > API密钥管理页面复制。


queue:填写队列名称。
2. 运行代码,查看消费端服务是否能正常运行无报错。
3. 通过 TDMQ CMQ 版控制台队列服务 > 发送消息向消息接收侧发送测试消息,验证消费者服务是否可以正常消费。

如图则为正常消费:



步骤3:切换生产流

1. 将原生产者的 NameServer 修改为 TDMQ CMQ 版队列的接入地址,在 TDMQ CMQ 版控制台队列服务 > API请求地址处复制。
2. 运行生产消息程序,验证生产者服务是否可以正常发送消息。



步骤4:下线旧消费者

等待旧的消费者继续消费完原 CMQ 队列中的存量消息后,下线 CMQ 业务消费者。
CMQ 控制台队列服务 > 队列 > 监控页面可查看 CMQ 队列中堆积的消息数量,当堆积消息数量为0时,代表原 CMQ 队列中的存量消息已被消费完成。