RabbitMQ队列迁移

RabbitMQ把某个队列从一个集群迁移到另一个集群的操作方法

比如,把队列 dhgate_translate_priority 由酒仙桥读写jxq_mq_group_e集群的172.19.224.22、172.19.224.25节点分别迁移至酒仙桥读写jxq_mq_group_g集群的172.19.40.71、172.19.40.72节点。

step1、在dhmq管理平台(http://172.19.40.57:8080/login)上查看dhgate_translate_priority队列信息和所属集群id:
确认好迁移前所属集群和节点等信息,方便下面写sql改库用。

step2、在新集群新建exchange,ename = dhgate_translate_priority,其中Features属性尽量和原来的保持一致,Policy也和原来的保持一致,如果新集群还未添加policy,先添加policy:
在这里插入图片描述
在这里插入图片描述

step3、在新集群新建队列,qname = dhgate_translate_priority,属性和参数跟原来保持一致,然后给该队列绑定ename=dhgate_translate_priority的exchange。

step4、修改酒仙桥读写环境的队列相关数据库:dhmq_dev(QA环境数据库ip:172.30.100.13,用户和密码:dhmq_dev),修改queue和exchange:

-- td_dhmq_queue表,修改queue
update td_dhmq_queue set queuenode = replace(queuenode,'172.19.224.22_','172.19.40.71_')
where clusterid='5' and queuename='dhgate_translate_priority';
update td_dhmq_queue set queuenode = replace(queuenode,'172.19.224.25_','172.19.40.72_')
where clusterid='5' and queuename='dhgate_translate_priority';
update td_dhmq_queue set clusterid=8
where clusterid='5' and queuename='dhgate_translate_priority';
-- td_dhmq_exchange表,修改exchange
update td_dhmq_exchange set brokernode = replace(brokernode,'172.19.224.22_','172.19.40.71_')
where clusterid=5 and ename='dhgate_translate_priority';
update td_dhmq_exchange set brokernode = replace(brokernode,'172.19.224.25_','172.19.40.72_')
where clusterid=5 and ename='dhgate_translate_priority';
update td_dhmq_exchange set clusterid=8
where clusterid=5 and ename='dhgate_translate_priority';

改完之后验证是否成功: http://172.19.40.57:8080/getqueue?queuename=dhgate_translate_priority
响应值为新集群节点列表即成功。
在这里插入图片描述
在这里插入图片描述

step5、重启生产者和消费者服务,然后到rabbitmq管理平台查看该队列incomming和deliver状态: http://172.19.40.71:15672/#/queues

step6、迁移老集群该队列的数据(如果有未消费完的话)

dhgate_translate_priority老集群机器上还有剩余未消费的数据,如图:
在这里插入图片描述

-------------接下来开始迁移历史遗留数据----------

首先,在新集群上创建shovel,用来迁移队列源数据:
[技术中心 > DHMQ队列迁移 > image2021-9-28_16-47-28.png]

然后看下shovel执行状态:
在这里插入图片描述

到老集群上看看遗留的消息个数:
在这里插入图片描述

再检查下消费者个数:
在这里插入图片描述
step7、数据迁移完毕之后,到新集群上删除shovel

step8、确认无误后,到老集群上删除该队列即可:
删除队列的方法一:rabbitmq管理平台上,Queues—> Binds(先解绑exchange)-→Delete(删除)

删除队列的方法二:使用命令删除队列

  # 查看所有队列
  rabbitmqctl list_queues
  # 根据 queue_name 参数,删除对应的队列
  rabbitmqctl delete_queue dhgate_translate_priority

迁移完毕!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值