本文同名博客老炮说Java:https://www.laopaojava.com/,每天更新Spring/SpringMvc/SpringBoot/实战项目等文章资料
顺便再给大家推荐一套SpringCloud微服务教程,方便学习:
SpringCloud微服务电商项目教程 - 老炮说Java-程序员编程资料和编程经验分享平台www.laopaojava.com
教程主要包含下面内容:
下载RabbitMQ镜像
- 镜像地址 RabbitMQ Docker官方认证镜像地址:https://hub.docker.com/_/rabbitmq
- 安装命令
安装之前,切记把Docker Hub设置为阿里云的加速,方便安装。
docker pull rabbitmq:3.7.14-management
注意使用后缀为"-management"的镜像版本,是包含网页控制台的。 - 查看安装
使用命令:docker images查看下载的镜像,如下图所示:
启动RabbitMQ
docker run -d --hostname localhost --name myrabbit -p 15672:15672 -p 5672:5672 rabbitmq:3.7.14-management
参数说明:
-d 后台进程运行
--hostname RabbitMQ主机名称
--name 容器名称
-p port:port 本地端口:容器端口
-p 15672:15672 http访问端口
-p 5672:5672 amqp访问端口
启动完成之后,使用:docker ps 查看程序运行情况。
使用:http://宿主ip:15672 访问,用户名密码使用默认:guest/guest.
启动多个RabbitMQ
docker run -d --hostname localhost --name myrabbit -p 15672:15672 -p 5672:5672 rabbitmq:3.7.14-management
docker run -d --hostname localhost2 --name myrabbit2 -p 15673:15672 -p 5673:5672 rabbitmq:3.7.14-management
这样我们就可以使用,http://宿主ip:15672 和 http://宿主ip:15673 进行访问了,默认账号密码依旧是guest/guest.
搭建RabbitMQ集群
步骤一:安装RabbitMQ
具体的参数含义,参见上文“启动RabbitMQ”部分。
#集群1
docker run -d --hostname rabbit1 --name myrabbit1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitCOOKIE' rabbitmq:3.7.14-management
#集群2
docker run -d --hostname rabbit2 --name myrabbit2 -p 15673:15672 -p 5673:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitCOOKIE' --link myrabbit1:rabbit1 rabbitmq:3.7.14-management
#集群3
docker run -d --hostname rabbit3 --name myrabbit3 -p 15674:15672 -p 5674:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitCOOKIE' --link myrabbit1:rabbit1 --link myrabbit2:rabbit2 rabbitmq:3.7.14-management
注意点:
- 多个容器之间使用“--link”连接,此属性不能少;
- Erlang COOKIE值必须相同,也就是RABBITMQ_ERLANG_COOKIE参数的值必须相同,原因见下文“配置相同Erlang COOKIE”部分;
步骤二:加入RabbitMQ节点到集群
- 设置节点1:
docker exec -it myrabbit1 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit - 设置节点2,加入到集群:
docker exec -it myrabbit2 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbit1
rabbitmqctl start_app
exit
参数“--ram”表示设置为内存节点,忽略次参数默认为磁盘节点。 - 设置节点3,加入到集群:
docker exec -it myrabbit3 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbit1
rabbitmqctl start_app
exit
设置好之后,使用http://物理机ip:15672 进行访问了,默认账号密码是guest/guest,效果如下图:
启动了3个节点,1个磁盘节点和2个内存节点。
配置相同Erlang COOKIE
有些特殊的情况,比如已经运行了一段时间的几个单个物理机,我们在之前没有设置过相同的Erlang COOKIE值,现在我们要把单个的物理机部署成集群,实现我们需要同步Erlang的COOKIE值。
- 为什么要配置相同的erlang COOKIE? 因为RabbitMQ是用Erlang实现的,Erlang COOKIE相当于不同节点之间相互通讯的秘钥,Erlang节点通过交换Erlang COOKIE获得认证。
- Erlang COOKIE的位置
要想知道Erlang COOKIE位置,首先要取得RabbitMQ启动日志里面的home dir路径,作为根路径。使用:“docker logs 容器名称”查看,如下图:
所以Erlang COOKIE的全部路径就是“/var/lib/rabbitmq/.erlang.COOKIE”。注意:每个人的erlang COOKIE位置可能不同,一定要查看自己的home dir路径。 - 复制Erlang COOKIE到其他RabbitMQ节点
获取到第一个RabbitMQ的Erlang COOKIE之后,只需要把这个文件复制到其他RabbitMQ节点即可。
物理机和容器之间复制命令如下:
容器复制文件到物理机:docker cp 容器名称:容器目录 物理机目录
物理机复制文件到容器:docker cp 物理机目录 容器名称:容器目录
设置Erlang COOKIE文件权a限:chmod 600 /var/lib/rabbitmq/.erlang.COOKIE
来源:https://www.cnblogs.com/wyt007/p/10904654.html