• RabbitMQ 集群 - 普通集群、镜像集群、仲裁队列


    目录

    一、RabbitMQ 集群

    1.1、前言

    1.2、普通集群

    1.3、镜像集群

    1.4、仲裁队列


    一、RabbitMQ 集群


    1.1、前言

    前面我们已经解决了消息可靠性问题,以及延迟消息问题 和 消息堆积问题.

    这最后一章,我们就来解决以下 mq 的可用性 和 并发能力.

    1.2、普通集群

    普通集群,也叫做标准集群(classic cluster),它具备以下特征:

    1. 集群中的各个节点是可以共享数据的,比如交换机信息、队列元信息,但不包含队列中的消息.

    什么是元信息? 元信息,就是指队列的描述信息,队列名、队列在哪一个节点中,但是不包括消息本身.

    不包括消息本身是什么意思? 假设我现在两个节点 mq1 和 mq2,然后有一个消费者订阅了 mq2 中的一个队列,但是呢,这个消费者在访问的时候,不想小心访问到了 mq1,不过由于在 mq1 上持有 mq2 的元信息,所以他知道 mq2 在哪,因此就可以通过这个元数据找到 mq2 这个节点,然后拿到我们想要的数据(这就类似于 mq1 上有 指向 mq2 的指针,通过指针就可以找到 mq2).

    2. 基于第一个特点的元信息,我们就可以在访问集群中的某个节点时,发现队列不在该节点,就可以通过要访问数据的所在节点的元信息,进一步的拿到这个节点的所有数据.

    这一点上面以及解释的很清楚了.

    3. 如果队列所在节点宕机,那么消息就会丢失.

    这里有点类似于 redis 集群中的分片处理,每一个集群上存储全集队列的一部分队列,因此这个节点挂了,消息必然会丢失.

    1.3、镜像集群

    镜像集群,本质上就是主从模式.

    主要有以下几个特性:

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

    这里就和之前的普通交换机不一样了,不仅仅是交换机可以共享,队列中的消息大家也可以共享了.

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

    比如我现在有三个节点,现在我再 mq1 上创建了一个队列 q1,因此 mq1 就是主节点,那么还可以给他挑一个镜像节点,比如我再 mq2 上做一个镜像,那么 mq2 就会去找 mq1 同步 q1 的所有数据.

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

    也就是说,主节点和镜像节点是可以相互备份的.

    比如 q1 在 mq1 上,给 mq2 备份了一份,q2 实在 mq2 上,给 mq3 备份了一份,q3 在 mq3 上的,给 mq1 备份了一份,那么这个时候,mq1 就是 q1 的主节点,同时也是 q3 的镜像节点.

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

    5.主宕机后,镜像节点会替代成新的主

    1.4、仲裁队列

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

    1. 与镜像队列一样,都是主从模式,支持主从数据同步
    2. 使用非常简单,没有复杂的配置
    3. 主从同步基于Raft协议,强一致

    在 SpringAMQP 中创建仲裁队列:

    1. @Bean
    2. public Queue quorumQueue() {
    3. return QueueBuilder
    4. .durable("quorum.queue") // 持久化
    5. .quorum() // 仲裁队列
    6. .build();
    7. }

    SpringAMQP连接集群,只需要在yaml中配置即可:

    1. spring:
    2. rabbitmq:
    3. addresses: 192.168.150.105:8071, 192.168.150.105:8072, 192.168.150.105:8073
    4. username: root
    5. password: 1111
    6. virtual-host: /

  • 相关阅读:
    图数据平台解决方案:Docker部署
    mysql中遇到查询字段的别名与函数冲突问题
    Mybatis(第三篇:不同的返回值类型:Map和JavaBean)
    Three.js相机简明教程
    朴素贝叶斯深度解码:从原理到深度学习应用
    Source map 超详细学习攻略_番茄出品
    《Redis实战》笔记
    Web3中文|区块链游戏的成长之痛
    CSS 布局 (二) 常规流、弹性盒子、网格
    ETL数据转换方式有哪些
  • 原文地址:https://blog.csdn.net/CYK_byte/article/details/133135103