MQ高级-仲裁队列

请添加图片描述
个人名片:

博主酒徒ᝰ.
个人简介沉醉在酒中,借着一股酒劲,去拼搏一个未来。
本篇励志三人行,必有我师焉。

请添加图片描述
本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 点击观看

五、MQ集群

4. 仲裁队列

  1. 集群特征

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

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

在任意控制台添加一个队列,一定要选择队列类型为Quorum类型。

在这里插入图片描述

在任意控制台查看队列:
在这里插入图片描述

可以看到,仲裁队列的 + 2字样。代表这个队列有2个镜像节点。

因为仲裁队列默认的镜像数为5。如果你的集群有7个节点,那么镜像数肯定是5;而我们集群只有3个节点,因此镜像数量就是3.

  1. 测试

1)测试数据共享

给mq1发送一条消息:
然后在mq1、mq2、mq3的任意控制台查看消息:

在这里插入图片描述

2)测试高可用

现在,我们让two.queue的主节点mq1宕机:

docker stop mq1

查看队列状态:
在这里插入图片描述

发现依然是健康的!并且其主节点切换到了rabbit@mq2上

  1. 集群扩容

1)加入集群

按照下面次序依次执行

①启动一个新的MQ容器:

docker run -d --net mq-net \
-v ${PWD}/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \
-e RABBITMQ_DEFAULT_USER=itcast \
-e RABBITMQ_DEFAULT_PASS=123321 \
--name mq4 \
--hostname mq4 \
-p 8074:15672 \
-p 8084:15672 \
rabbitmq:3.8-management

②进入容器控制台:

docker exec -it mq4 bash

③停止mq进程

rabbitmqctl stop_app

④重置RabbitMQ中的数据:

rabbitmqctl reset

⑤加入mq1:

rabbitmqctl join_cluster rabbit@mq1

⑥再次启动mq进程

rabbitmqctl start_app

查看集群状态:

在这里插入图片描述

2)增加仲裁队列副本

我们先查看下quorum.queue这个队列目前的副本情况,进入mq1容器:

docker exec -it mq1 bash

执行命令:

# 查看集群状态
rabbitmq-queues quorum_status "quorum.queue"

将mq4加入:

rabbitmq-queues add_member "quorum.queue" "rabbit@mq4"

在这里插入图片描述

查看控制台,发现quorum.queue的镜像数量也从原来的 +2 变成了 +3:

在这里插入图片描述

  1. Java代码创建仲裁队列
@Bean
public Queue quorumQueue() {
    return QueueBuilder
        .durable("quorum.queue")
        .quorum() // 仲裁队列
        .build();
}
  1. SpringAMQP连接MQ集群

注意,这里用address来代替host、port方式

spring:
  rabbitmq:
    addresses: [虚拟机ip地址]:8071, [虚拟机ip地址]:8072, [虚拟机ip地址]:8073
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值