个人主页:金鳞踏雨
个人简介:大家好,我是金鳞,一个初出茅庐的Java小白
目前状况:22届普通本科毕业生,几经波折了,现在任职于一家国内大型知名日化公司,从事Java开发工作
我的博客:这里是CSDN,是我学习技术,总结知识的地方。希望和各位大佬交流,共同进步 ~
RabbitMQ版本,通常与他的大的功能是有关系的。3.8.x版本主要是围绕Quorum Queue功能,而3.9.x版本主要是围绕Streams功能。目前还有3.10.x版本,还在rc阶段。我们这次选择3.9.15版本。
RabbitMQ是基于Erlang语言开发,所以安装前需要安装Erlang语言环境。需要注意下的是RabbitMQ与ErLang是有版本对应关系的。3.9.15版本的RabbitMQ只支持23.2以上到24.3版本的Erlang。
一、使用Docker搭建RabbitMQ(单机)
使用docker安装RabbitMQ,最大的好处,我认为是不需要额外安装 erlang
1. 拉取镜像
docker pull rabbitmq:3.9.15-management
2. 启动
docker run -d --name rabbitmq-tuling -p 5672:5672 -p 15672:15672 \
-v /opt/docker/rabbitmq/data:/var/lib/rabbitmq --hostname myRabbitHsotName \
-e RdockerABBITMQ_DEFAULT_VHOST=myRabbitHsotName \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=888888 \
--restart=always \
rabbitmq:3.9.15-management
上述参数解析:
- docker run:启动一个新的Docker容器。
- -d:以后台(守护进程)模式运行容器。
- --name rabbitmq-tuling:为容器指定一个名称(rabbitmq-tuling)。
- -p 5672:5672 -p 15672:15672:将容器内部的5672端口映射到主机的5672端口,并将容器内部的15672端口映射到主机的15672端口。5672端口是RabbitMQ默认的AMQP端口,15672端口是RabbitMQ管理控制台的端口。
- -v /opt/docker/rabbitmq/data:/var/lib/rabbitmq:将主机的/opt/docker/rabbitmq/data目录挂载到容器内部的/var/lib/rabbitmq目录。这样做的目的是将RabbitMQ的数据持久化保存在主机的指定位置,以便在容器重启或删除后数据不会丢失。
- --hostname myRabbitHsotName:设置RabbitMQ容器的主机名为myRabbitHsotName。
- -e RABBITMQ_DEFAULT_USER=admin:设置RabbitMQ的默认用户名为admin。
- -e RABBITMQ_DEFAULT_PASS=888888:设置RabbitMQ的默认密码为888888。
- --restart=always:配置容器在退出时总是自动重启。
- rabbitmq:3.9.15-management:指定要使用的Docker镜像。rabbitmq:3.9.15-management是包含RabbitMQ 3.9.15和管理插件的镜像版本。
3. 允许外部 webui 访问
选择带有“mangement”的版本,可跳过这一步。
注意:该命令可以进入容器内部
docker exec -it rabbitmq-tuling bash
开启 rabbitmq_management 插件(可以省略)
rabbitmq-plugins enable rabbitmq_management
4. 给用户设置权限
创建账号
rabbitmqctl add_user guest guest
设置用户角色
rabbitmqctl set_user_tags guest administrator
设置用户权限
rabbitmqctl set_permissions -p "/" guest ".*" ".*" ".*"
设置完成后可以查看当前用户和角色(需要开启服务)
rabbitmqctl list_users
访问:localhost:15672
二、使用Docker搭建RabbitMQ(集群)
1.创建 Docker 网络
docker network create rabbitmq_network
# 查看所有的docker网络环境
docker network ls
#删除
docker network rm rabbitmq_network
2.创建、启动rabbitmq节点
# rabbitmq01
docker run -d --hostname rabbitmq01 --name rabbitmqCluster01 -p 15673:15672 -p 5673:5672 --network --restart=always rabbitmq_network rabbitmq:3.9.15-management
# rabbitmq02
docker run -d --hostname rabbitmq02 --name rabbitmqCluster02 -p 15674:15672 -p 5674:5672 --network --restart=always rabbitmq_network rabbitmq:3.9.15-management
# rabbitmq03
docker run -d --hostname rabbitmq03 --name rabbitmqCluster03 -p 15675:15672 -p 5675:5672 --network --restart=always rabbitmq_network rabbitmq:3.9.15-management
容器自启动
docker update 【容器ID】 --restart=always
# 批量
docker update --restart=always 【容器ID1】 【容器ID2】 【容器ID3】
3.同步cookie(Erlang Cookie)
否则集群是启动不起来的!!!
# 查询目标机上的cookie
docker exec rabbitmqCluster01 cat /var/lib/rabbitmq/.erlang.cookie
# 输出 - > FOJULMNXIGMOHHVAZGWW
# 依次修改rabbitmqCluster02、rabbitmqCluster03
docker exec rabbitmqCluster02 sh -c "echo 'BSSGXNUEBNNHPDUJXZJB' > /var/lib/rabbitmq/.erlang.cookie"
docker exec rabbitmqCluster03 sh -c "echo 'BSSGXNUEBNNHPDUJXZJB' > /var/lib/rabbitmq/.erlang.cookie"
重启所有节点
否则修改的cookie是无法生效的!
docker restart rabbitmqCluster01 rabbitmqCluster02 rabbitmqCluster03
4.进度docker容器内部【第二、第三】
#进入第二个容器
docker exec -it rabbitmqCluster02 bash
rabbitmqctl stop_app
rabbitmqctl reset
#加入集群
rabbitmqctl join_cluster rabbit@rabbitmq01
rabbitmqctl start_app
exit
#进入第三个容器
docker exec -it rabbitmqCluster03 bash
rabbitmqctl stop_app
rabbitmqctl reset
#加入集群
rabbitmqctl join_cluster rabbit@rabbitmq01
rabbitmqctl start_app
exit
访问:localhost:15673
文章到这里就结束了,如果有什么疑问的地方,可以在评论区指出~
希望能和大佬们一起努力,诸君顶峰相见
再次感谢各位小伙伴儿们的支持!!!