rabbitmq 集群docker玩法

属于一个简单测试玩的,rabbitmq 实际最近几年变化还是挺大的(主要是一些新特性,核心amqp 是一致的)

环境准备

测试一个基于raft 选举的rabbitmq 集群队列

  • docker-compose
version: "3"
services:
  mq:
     build: ./
     container_name: rabbitmq
     environment:
      - RABBITMQ_DEFAULT_USER=admin
      - RABBITMQ_DEFAULT_PASS=admin
      - RABBITMQ_NODENAME=rabbitmq
     hostname: rabbitmq
     ports:
       - "5672:5672"
       - "15672:15672"
       - "25672:25672"
       - "14369:4369"
       - "5671:5671"
     depends_on:
        - mqv2
  mqv2:
     build: ./
     container_name: rabbitmqv2
     hostname: rabbitmqv2
     environment:
      - RABBITMQ_DEFAULT_USER=admin
      - RABBITMQ_DEFAULT_PASS=admin
      - RABBITMQ_NODENAME=rabbitmqv2
     ports:
       - "5673:5672"
       - "15673:15672"
       - "25673:25672"
       - "14370:4369"
       - "5674:5671"
  mqv3:
     build: ./
     container_name: rabbitmqv3
     hostname: rabbitmqv3
     environment:
      - RABBITMQ_DEFAULT_USER=admin
      - RABBITMQ_DEFAULT_PASS=admin
      - RABBITMQ_NODENAME=rabbitmqv3
     ports:
       - "5675:5672"
       - "15674:15672"
       - "25674:25672"
       - "14371:4369"
       - "5675:5671"
  • 集群玩法
    具体的加入集群操作与以前的玩法是一样的,核心还是erlang 那套玩法(cookie 一致,基于erlang 的cluster 方式加入集群)
    参考操作
 
// add  rabbitmqv2 node 在rabbitmqv2 操作
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbitmq@rabbitmq
rabbitmqctl start_app
// view cluster info in  rabbitmq or rabbitmqv2
rabbitmqctl cluster_status
// add rabbitmqv3 node 在rabbitmqv3 操作
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbitmqv2@rabbitmqv2
rabbitmqctl start_app
// view cluster info  in  rabbitmq or rabbitmqv2  or rabbitmqv3
rabbitmqctl cluster_status
// change cluster name
rabbitmqctl set_cluster_name  mymq_cluster

效果

测试quorum queues

主要基于web 页面操作,比较简单
效果,会看到默认就是持久化的,同时包很了leader 以及follower


通过cli 查看

 
rabbitmq-queues  quorum_status mydemo

代码调用

这个很简单,会发现我们重启任何节点对于业务的影响比较小(为了测试使用了独立节点的ip)

var q = 'mydemo';
var open = require('amqplib').connect('amqp://admin:admin@127.0.0.1:5672/'); // 实际可以用lb 地址
open.then(function(conn) {
  return conn.createChannel();
}).then(function(ch) {
    return ch.consume(q, function(msg) {
      if (msg !== null) {
        console.log(msg.content.toString());
        ch.ack(msg);
      }
  });
}).catch(console.warn);

说明

quorum-queues 是官方目前推荐的玩法,以前为了高可用的镜像队列玩法,会逐步被淘汰的,当然因为quorum-queues 默认就是持久化的
依赖磁盘的写入操作性能是会有一些影响的,官方提供了一个性能优化指导,目前官方也提供了一种stream 的模式队列,以上是一个简单的
测试,实际使用还有不少需要优化的,但是quorum-queues 队列的确方便了不少,维护以及管理上很方便了

参考资料

https://rabbitmq-website.pages.dev/docs/clustering
https://rabbitmq-website.pages.dev/docs/quorum-queues
https://rabbitmq-website.pages.dev/docs/quorum-queues#performance-tuning
https://github.com/rongfengliang/rabbitmq_quorum_queue_learning

posted on   荣锋亮  阅读(15)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2023-01-05 dremio PrivilegeCatalog 接口简单说明
2023-01-05 dremio SourceCatalog 服务说明
2023-01-05 dremio ManagedStoragePlugin 简单说明
2021-01-05 Data-Prepper opendistro 开源的基于es 的trace 分析工具
2021-01-05 使用babel-standalone 让浏览器支持es6特性
2021-01-05 tempo grafana 团队开源的分布式追踪框架
2021-01-05 grafana/agent grafana 团队开源的兼容prometheus 的agent

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示