5.4 MQ集群

一、集群分类

  1. RabbitMQ是基于Erlang语言编写,而Erlan又是面向并发的语言,天然支持集群模式。RabbitMQ的集群有两种模式

    1. 普通集群:是一种分布式集群,将队列分散到集群的各个节点,从而提高整个集群的并发能力

    2. 镜像集群:是一种主从集群,普通集群的基础上,增加了主从备份功能,提高集群的数据可用性

  2. 镜像集群虽然支持主从,但主从同步并不是强一致的,某些情况下可能有数据丢失的风险。因此在RabbitMQ3.8版本以后,推出了新的功能:仲裁队列,用来代替镜像集群,底层采用Rafe协议确保主从数据的一致性

二、普通集群

  1. 普通集群,也叫标准集群(classic cluster),具备一下特征

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

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

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

  2. 搭建普通集群步骤可以参考:附录

三、镜像集群

  1. 镜像集群,本质是主从模式,具备以下特征

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

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

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

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

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

  2. 搭建镜像集群步骤可以参考:附录

    备注:需要使用命令进行搭建

    ​ 任意一个节点运行均可

四、仲裁队列

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

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

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

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

  2. 搭建镜像集群步骤可以参考:附录

    备注:直接控制台添加操作即可

  3. SpringAMQP创建仲裁队列集群

    @Bean
    public Queue quorumQueue() {
        return QueueBuilder
            .durable("quorum.queue")   // 创建名称,持久化
            .quorum()    // 仲裁队列
            .build();
    }
  4. SpringAMQP链接集群,在yml中配置即可

    spring:
      rabbitmq:
    #     host: 127.0.0.1
    #     port: 5672
      	addresses: ip:端口, ip:端口, ip:端口
      	username: 
      	password:
      	...

    备注:配置集群地址以及端口需要使用address来指定

    ​ 单机,可以使用host+port

最后更新于

这有帮助吗?