当前位置: 首页 > news >正文

RabbitMQ 的高可用性

RabbitMQ 是比较有代表性的,因为是基于主从非分布式)做高可用的RabbitMQ 有三种模式:单机模式、普通集群模式、镜像集群模式。

单机模式

单机模式,生产几乎不用。

普通集群模式(无高可用性)

普通集群模式,有服务器ABC,在服务器ABC上分别启动RabbitMQ实例,生产者生产消息1,随机发给某一实例A,实例BC 上记录消息1的原数据信息(比如消息1具体信息在示例A上),消费者消费消息,随机连接某个示例B,消费消息1,实例B根据 原数据发现消息1在实例A上,则实例B去实例A拉取消息返回给消费者。

就是个普通集群。因为这导致你要么消费者每次随机连接一个实例然后拉取数据,要么固定连接那个 queue 所在实例消费数据,前者有数据拉取的开销,后者导致单实例性能瓶颈。而且如果那个放 queue 的实例宕机了,会导致接下来其他实例就无法从那个实例拉取,如果你开启了消息持久化,让 RabbitMQ 落地存储消息的话,消息不一定会丢,得等这个实例恢复了,然后才可以继续从这个 queue 拉取数据。所以这个事儿就比较尴尬了,这就没有什么所谓的高可用性,这方案主要是提高吞吐量的,就是说让集群中多个节点来服务某个 queue 的读写操作。

镜像集群模式(高可用性)

这种模式,才是所谓的 RabbitMQ 的高可用模式。跟普通集群模式不一样的是,在镜像集群模式下,你创建的 queue,无论元数据还是 queue 里的消息都会存在于多个实例上,就是说,每个 RabbitMQ 节点都有这个 queue 的一个完整镜像,包含 queue 的全部数据的意思。然后每次你写消息到 queue 的时候,都会自动把消息同步到多个实例的 queue 上。

那么如何开启这个镜像集群模式呢?其实很简单,RabbitMQ 有很好的管理控制台,就是在后台新增一个策略,这个策略是镜像集群模式的策略,指定的时候是可以要求数据同步到所有节点的,也可以要求同步到指定数量的节点,再次创建 queue 的时候,应用这个策略,就会自动将数据同步到其他的节点上去了。

这样的话,好处在于,你任何一个机器宕机了,没事儿,其它机器(节点)还包含了这个 queue 的完整数据,别的 consumer 都可以到其它节点上去消费数据。坏处在于,第一,这个性能开销也太大了吧,消息需要同步到所有机器上,导致网络带宽压力和消耗很重!第二,这么玩儿,不是分布式的,就没有扩展性可言了,如果某个 queue 负载很重,你加机器,新增的机器也包含了这个 queue 的所有数据,并没有办法线性扩展你的 queue。你想,如果这个 queue 的数据量很大,大到这个机器上的容量无法容纳了,此时该怎么办呢?

http://www.xdnf.cn/news/930133.html

相关文章:

  • 比较数据迁移后MySQL数据库和PostgreSQL数据仓库中的表
  • [蓝桥杯 2024 国 B] 蚂蚁开会
  • 分享今天做的力扣SQL题
  • 2025.6.8
  • 《从函数模板到类模板:OP泛型编程进化论》
  • C++信息学竞赛中常用函数的一般用法
  • C++ OpenCV 学习路线图
  • YooAsset 2.3.9版本 示例教程运行
  • el-input,金额千分符自动转换
  • Unity中的transform.up
  • 【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
  • Java求职者面试:微服务技术与源码原理深度解析
  • SpringSecurity+vue通用权限系统2
  • SOC-ESP32S3部分:36-适配自己的板卡
  • HTML前端开发:JavaScript的条分支语句if,Switch
  • HTML前端开发:JavaScript 常用事件详解
  • 4. TypeScript 类型推断与类型组合
  • 分析 java 的 Map<String,Map<String, List<Map<String,Integer>>>>
  • Go语言并发模型与模式:Worker Pool 模式
  • 详解鸿蒙Next仓颉开发语言中的动画
  • 勒让德多项式
  • 投屏技术深度解析:从原理到成功率优化实战·优雅草卓伊凡
  • 高级数据结构与算法期末考试速成记录2
  • exec进程替换函数族
  • AOSP CachedAppOptimizer中的冻结和内存压缩功能
  • 11.无重复字符的最长子串
  • LUFFY(路飞): 使用DeepSeek指导Qwen强化学习
  • 34 C 语言字符串转数值函数详解:strtol、strtoll、strtoul、strtoull(含 errno 处理、ERANGE 错误)
  • 创建一个纯直线组成的字体库
  • 【强连通分量 缩点 最长路 拓扑排序】P2656 采蘑菇|普及+