使用 rabbitmqctl 创建队列

起因

想要使用高可用的rabbitmq-ha,寻找最简单的方案,找到了helm官方charts中,有个rabbitmq-hacharts ,就想先放到测试环境,验证一下可用性,就开始了有意思的事情。


皮一下很开心!
过程

首先使用使用的是helm/charts 仓库中的stable中的rabbitmqchartsrabbitmq-hacharts,分别启动了一个单机版的rabbitmq和一个ha版的rabbitmq

rabbitmq运行一段时间后,随着项目运行产生了一些queue,channel,exchange

这个时候想要将rabbitmq换成ha版了,对ha版的进行了杀pod以及性能压测,得出可用的结论。

想要做到无感知的切换rabbitmqrabbitmq-ha,首先是将rabbitmq-ha搭建好

queue 的创建分为两种
  • 没有queue时自动创建
  • 项目启动的时候创建

如果是第二种形式的,直接切换mq,会导致项目报错,所以需要将原先rabbitmq中已经存在的queue,exchange,channel等迁移到新的rabbitmq-ha中,所以决定采用rabbitmqctl进行创建队列,google一大圈之后,只找到一篇有用的,划重点:erlang表达式啥的我又看不懂。

单机版的创建 queue

rabbitmqctl eval 'rabbit_amqqueue:declare({resource, <<"/">>, queue, <<"test-queue">>}, true, false, [], none).'

但是放到ha版的却发现报错
在这里插入图片描述

后来发现在多节点时需要指定节点

Ha版创建 queue

rabbitmqctl eval 'rabbit_amqqueue:declare({resource, <<"/">>, queue, <<"test-queue">>}, true, false, [], none, "节点地址").'

节点地址在rabbitmq的dashboard界面可以找到
在这里插入图片描述

这里只需要在一个节点上创建queue,因为每个节点都是mirror节点,配置好pattern后,多个节点直接的信息都会同步

列出原先 rabbitmq 中所有的 queue

rabbitmqctl list_queues

循环创建所有的 queue

rabbitmqctl list_queues | awk '{print $1}' > queues.txt

queues.txt导入到Ha的某个节点

cat queues.txt | while read queue ; do (rabbitmqctl eval 'rabbit_amqqueue:declare({resource, <<"/">>, queue, <<"test-queue">>}, true, false, [], none, "节点地址").'& done

注意 : 这里没有进行消息的同步,而是找了一个消息很少的时候,可能会丢消息,当然消息可以进行消息补偿来弄。

最后切流量

将原先链接在单机版rabbitmq上的链接切换到rabbitmq-ha上,这里通过的是k8sservicepod selector来寻找Podlabel来做的,结果符合预期。

参考
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值