使用 rabbitmqctl 创建队列

编程入门 行业动态 更新时间:2024-10-11 07:31:41

使用 rabbitmqctl 创建<a href=https://www.elefans.com/category/jswz/34/1771257.html style=队列"/>

使用 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来做的,结果符合预期。

参考

更多推荐

使用 rabbitmqctl 创建队列

本文发布于:2024-03-06 01:12:01,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1713962.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:队列   rabbitmqctl

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!