添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
深沉的苹果  ·  K8S的limits | 牛啊牛啊·  15 小时前    · 
年轻有为的热带鱼  ·  如何解决css ...·  昨天    · 
强健的冰淇淋  ·  azure ...·  5 天前    · 
酒量小的石榴  ·  Write SQL in Java 8 ...·  4 月前    · 
玉树临风的硬币  ·  vue ...·  6 月前    · 
稳重的煎饼  ·  【摄影基础教程pdf ...·  8 月前    · 
细心的拖把  ·  android - Dagger ...·  9 月前    · 

rabbitMQ集群有两种模式:

第一种 普通模式:对于Queue来说,消息实体只存在于其中的一个节点,A/B两个节点仅有相同的元数据(队列结构)。也就是说数据存在于集群中某个节点,我们从另一个节点获取的时候是该节点和存储数据的节点临时进行传输。可以理解为A/B,搭建集群,数据存到A,我们从节点B可以获取到是B节点临时和A节点建立了数据通道从A获取数据,假设A节点宕机,则数据丢失。这种模式的话没有实现高可用。

第二种 镜像模式:也称为HA高可用模式,与普通集群模式区别 主要是消息实体会主动在镜像节点间同步数据,而不是只存储数据元信息。这种模式保证了HA,但是降低了系统性能,如果镜像队列过多,在消息大量进来的情况下,集群内部的网络带宽会被这种内部同步消耗掉,这种适用于可靠性要求较高的场景中。

下面研究镜像集群模式的搭建,还是以docker的形式进行搭建。

1.拉取镜像

docker pull hub.c.163.com/library/rabbitmq:management

2.创建容器,启动两个mq进程

1.容器1

$ docker run -d --hostname rabbitmq01 --name rabbitmqCluster01 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' hub.c.163.com/library/rabbitmq:management
df45f88945b572ed8b23c8998db8819e7c7826ded2058ea235c2f04f775f4a2c

2.容器2

$ docker run -d --hostname rabbitmq02 --name rabbitmqCluster02  -p 15673:15672 -p 5673:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie'  --link rabbitmqCluster01:rabbitmq01 hub.c.163.com/library/rabbitmq:management
1f18cbceb309d9ac3f723563151d81f18955b1e5534f23222b3e92cba57dbb86

参数解释:

-d: 后台运行容器,并返回容器ID;
--hostname rabbitmq02  指定容器的hostname
--name="rabbitmqCluster02": 为容器指定一个名称;
-p 外部端口:内部端口,是将端口做映射。15672是管理界面端口,5672是客户端通讯接口
-e  设置环境变量
--link=[]: 添加链接到另一个容器;也就是使得两个容器可以通信

这里解释下。-e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' 是设置环境变量。 ErlangCookie是保证不同节点间可以互相通信的密钥,要保证不同节点间可以互相通信必须保证共享相同的Erlang Cookie,在容器内部的话是放在/var/lib/rabbitmq/.erlang.cookie

进入容器内部查看:

root@rabbitmq02:/# cat /var/lib/rabbitmq/.erlang.cookie
rabbitmqCookie

3.启动后应该通过15672端口和15673端口都可以访问到management控制台

4.容器节点加入集群

1.对节点1设置

(1)进入容器1,也就是rabbitmq01

$ docker exec -it df bash

(2) 停止服务、清数据、重启

root@rabbitmq01:/# rabbitmqctl stop_app  #停服务
Stopping rabbit application on node rabbit@rabbitmq01
root@rabbitmq01:/# rabbitmqctl reset  #清掉数据
Resetting node rabbit@rabbitmq01
root@rabbitmq01:/# rabbitmqctl start_app  重启
Starting node rabbit@rabbitmq01

2.对节点2设置

(1)进入容器

$ docker exec -it 1f /bin/bash

(2)加入集群

root@rabbitmq02:/# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@rabbitmq02
root@rabbitmq02:/# rabbitmqctl reset
Resetting node rabbit@rabbitmq02
root@rabbitmq02:/# rabbitmqctl join_cluster --ram rabbit@rabbitmq01
Clustering node rabbit@rabbitmq02 with rabbit@rabbitmq01
root@rabbitmq02:/# rabbitmqctl start_app
Starting node rabbit@rabbitmq02

rabbitmqctl join_cluster --ram rabbit@rabbitmq01 是加入集群,rabbitmq01 是另一个节点的hostname。

补充:如果还有第三个节点加入集群,也是用上面的方式加入集群

5.到管理端查看,可以看到节点信息

6. 增加一个策略,设置集群镜像模式

可以到控制台设置,也可以到界面设置。这里在控制台设置:

root@rabbitmq01:/# rabbitmqctl set_policy ha "^" '{"ha-mode":"all"}'
Setting policy "ha" for pattern "^" to "{\"ha-mode\":\"all\"}" with priority "0"

到界面查看:

到此集群搭建完成。

7.Springboot连接集群

只需要修改连接地址就可以了,如下:

#cluster
spring.rabbitmq.addresses=192.168.99.100:5672,192.168.99.100:5673
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
key value 数组 java java 数组api

1. Arrays类1.1 概述java.util.Arrays 此类包含用来操作数组的各种方法,比如排序和搜索等七所有方法均为静态方法,调用起来非常简单1.2 操作数组的方法 public static String toString(int[] a);返回指定数组内容的字符串表示形式public class test1 { public static void main(String[