消息中间件篇之RabbitMQ-高可用机制

一、怎么保证高可用性

在生产环境下,使用集群 来保证高可用性,一般我们采用普通集群、镜像集群、仲裁队列。

二、普通集群

普通集群,或者叫标准集群(classic cluster),具备下列特征:

  1. 会在集群各个节点间共享部分数据,包括:交换机、队列元信息。不包含队列中的消息。

  2. 当访问集群某节点时,如果队列不在该节点,会从数据所在节点传递到当前节点并返回。

  3. 队列所在节点宕机,队列中的消息就会丢失。(缺点)

三、镜像集群

镜像集群:本质是主从模式,具备下面的特征:

  1. 交换机、队列、队列中的消息会在各个mq的镜像节点之间同步备份。

  2. 创建 队列的节点被称为该队列的主节点 ,备份 到的其它节点叫做该队列的镜像节点。

  3. 一个队列的主节点可能是另一个队列的镜像节点。

  4. 所有操作都是主节点完成,然后同步给镜像节点。

  5. 主宕机后,镜像节点会替代成新的主。(缺点:可能数据丢失)

四、仲裁队列

仲裁队列:仲裁队列是3.8版本以后才有的新功能,用来替代镜像队列,具备下列特征:

  1. 与镜像队列一样,都是主从模式,支持主从数据同步。

  2. 使用非常简单,没有复杂的配置。

  3. 主从同步基于Raft协议,强一致。

五、面试题

面试官:RabbitMQ的高可用机制有了解过嘛?

候选人:我们当时项目在生产环境下,使用的集群,当时搭建是镜像模式集群,使用了3台机器。

镜像队列结构是一主多从,所有操作都是主节点完成,然后同步给镜像节点,如果主节点宕机后,镜像节点会替代成新的主节点,不过在主从同步完成前,主节点就已经宕机,可能出现数据丢失。

面试官:那出现丢数据怎么解决呢?

候选人:我们可以采用仲裁队列,与镜像队列一样,都是主从模式,支持主从数据同步,主从同步基于Raft协议,强一致。并且使用起来也非常简单,不需要额外的配置,在声明队列的时候只要指定这个是仲裁队列即可。

相关推荐
IT研究室2 分钟前
最新计算机毕业设计选题推荐-基于spring boot的智慧教学资源管理与互动交流平台-网站-文档指导-Java-springboot
java·spring boot·课程设计
蜗牛互联网4 分钟前
Java HttpClient 调用 Gemini 图像理解与金额字段校验
java·开发语言·人工智能·后端·python
开开心心就好4 分钟前
视频里的图片怎么提取?双击一下就导出
java·前端·人工智能·spring·智能手机·intellij-idea·excel
蜗牛互联网6 分钟前
Python Responses API视觉输入与本地金额校验最小实现
java·开发语言·人工智能·后端·python
程序猿_极客8 分钟前
【免费】分享一套优质的基于Java的智慧养老院管理系统的设计与实现(带可视化),源码+文档+视频详解(讲解)
java·spring boot·后端·养老院管理系统
ly768918 分钟前
从 TF-IDF 到 BM25:Elasticsearch 相关性评分的字段长度归一化与 boost 调参边界
java·elasticsearch·query dsl·bm25·相关性评分
程序猿_极客22 分钟前
【免费】分享一套优质的基于SpringBoot的旅游管理系统的设计与实现(带智能推荐算法功能),源码+文档+视频详解(讲解)
java·spring boot·课程设计·旅游管理系统·计算机专业项目
Wang's Blog25 分钟前
Java 中间件之 RabbitMQ 快速入门: RabbitMQ 介绍与安装部署
java·中间件·java-rabbitmq
樱花落木兰27 分钟前
Redisson 可重入分布式锁底层原理详解
分布式
sibylyue38 分钟前
SQLite 运行模式
java·jvm·sqlite