操作场景
本文以一个 Java 客户端为例,为您介绍将 CMQ 队列迁移至 TDMQ CMQ 版的操作步骤。
迁移原理
方案总览
整体流程
- 1在控制台上将 CMQ 的队列和主题元数据迁移至 TDMQ CMQ 版中。
- 2旧的消费者保持不动,消费端新建消费者,接入到 TDMQ CMQ 版的队列中。
- 3生产者停止向原 CMQ 队列生产消息,并切换生产流接入到 TDMQ CMQ 版队列中。
- 4旧的消费者继续消费原 CMQ 队列中的存量消息,消费完成后下线 CMQ 业务消费者。
前提条件
参考 SDK 文档部署好 CMQ 队列的生产端和消费端服务,并且运行正常。以下迁移步骤以 TCP SDK 为例。
操作步骤
步骤1:迁移元数据
- 登录 CMQ 控制台。
- 在左侧导航栏选择队列,选择好地域后,单击页面上方的同步到 TDMQ。
- 在弹出的窗口中单击启动,将该地域下的所有队列和主题元数据迁移至 TDMQ CMQ 版中。
- 迁移完成后,登录 TDMQ 控制台。
- 在左侧导航栏选择队列服务,选择相同的地域可看到迁移到 TDMQ CMQ 版的队列。
步骤2:新建消费者
在消费端新建一个消费者,并接入到 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:填写队列名称。
运行代码,查看消费端服务是否能正常运行无报错。
通过 TDMQ CMQ 版控制台 的队列服务 > 发送消息向消息接收侧发送测试消息,验证消费者服务是否可以正常消费。
如图则为正常消费:
步骤3:切换生产流
- 将原生产者的 NameServer 修改为 TDMQ CMQ 版队列的接入地址,在 TDMQ CMQ 版控制台的队列服务 > API请求地址处复制。
- 运行生产消息程序,验证生产者服务是否可以正常发送消息。
步骤4:下线旧消费者
等待旧的消费者继续消费完原 CMQ 队列中的存量消息后,下线 CMQ 业务消费者。
在 CMQ 控制台 的队列服务 > 队列 > 监控页面可查看 CMQ 队列中堆积的消息数量,当堆积消息数量为0时,代表原 CMQ 队列中的存量消息已被消费完成。