使用docker搭建 Rabbitmq服务与 Activemq 服务 及 Rabbitmq集群

近期项目中,我的项目内部通信是采用rabbitmq进行通信,与其他项目交互时是使用 Activemq 进行交互,所以研究了两种消息队列的安装方式
一般情况下映射到本地端口就可以了,例如第一个Rabbitmq服务 -p 127.0.0.1:5772:5672映射到本地端口,防止产生安全问题

一、单个Rabbitmq服务

docker run -d  --hostname rabbit1 --name myrabbit1 -e RABBITMQ_DEFAULT_USER=username -e RABBITMQ_DEFAULT_PASS=password   -p 5772:5672 -p 15673:15672 rabbitmq:3.6.15-management

查看服务状态 docker ps

0b3c88c98c99        rabbitmq:3.6.15-management   "docker-entrypoint.s…"   About an hour ago   Up About an hour    4369/tcp, 5671/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:5772->5672/tcp, 0.0.0.0:15673->15672/tcp   myrabbit1

这时,可以访问服务器的http://IP:15673端口查看Rabbitmq自带的网页。通过5772端口访问服务
我们设置的用户默认就是administrator用户

二、Activemq 服务

docker run -d --name activemq1 -p 61617:61616 -p 61623:61613 -p 8162:8161 webcenter/activemq

容器8161端口是容器提供的web网页端口,这里映射到了0.0.0.0:8162端口,可以通过http://ip:8162访问,默认账号:admin,密码:admin
其他两个端口看个人使用,我使用stomp进行连接,所以要开61613接口。

三、Rabbitmq 集群搭建

写了了一个脚本,命名rabbitmq.sh,给它执行权限

chmod +x rabbitmq.sh

编辑rabbitmq.sh文件内容 vim rabbitmq.sh ,内容如下

#!/bin/bash
docker run -d  --hostname rabbit1 --name myrabbit1 -e RABBITMQ_DEFAULT_USER=username -e RABBITMQ_DEFAULT_PASS=password -e RABBITMQ_ERLANG_COOKIE='rabbitcookie'  -p 5772:5672 -p 15673:15672 rabbitmq:3.6.15-management
docker run -d  --hostname rabbit2 --name myrabbit2 -e RABBITMQ_DEFAULT_USER=username -e RABBITMQ_DEFAULT_PASS=password  -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' --link myrabbit1:rabbit1   rabbitmq:3.6.15-management
docker run -d  --hostname rabbit3 --name myrabbit3 -e RABBITMQ_DEFAULT_USER=username -e RABBITMQ_DEFAULT_PASS=password  -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' --link myrabbit1:rabbit1 --link myrabbit2:rabbit2  rabbitmq:3.6.15-management

这样就开启了三个容器,各个命令作用:

-d 守护进程
--hostname rabbit1 当其他容器连接到这个容器时容器的ip  比如其他容器 --link myrabbit1时使用 ping rabbit1 可以看到容器ip
--name 容器运行名称
-e RABBITMQ_DEFAULT_USER=username # 设置默认账号
-e RABBITMQ_DEFAULT_PASS=password # 设置默认密码
-e RABBITMQ_ERLANG_COOKIE='rabbitcookie'  # 这个用来搭建集群用,单个容器不需要
-p 5772:5672 -p 15673:15672  # 将服务器 0.0.0.0:5772 映射到容器0.0.0.0:5672端口
rabbitmq:3.6.15-management  # 镜像名称

查看三个容器的运行状态 docker ps

CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                                                                        NAMES
64390a5a78bf        rabbitmq:3.6.15-management   "docker-entrypoint.s…"   About an hour ago   Up About an hour    4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp                                          myrabbit3
e4093a815e9d        rabbitmq:3.6.15-management   "docker-entrypoint.s…"   About an hour ago   Up About an hour    4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp                                          myrabbit2
0b3c88c98c99        rabbitmq:3.6.15-management   "docker-entrypoint.s…"   About an hour ago   Up About an hour    4369/tcp, 5671/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:5772->5672/tcp, 0.0.0.0:15673->15672/tcp   myrabbit1

这时,可以访问服务器的http://IP:15673端口查看Rabbitmq自带的网页。通过5772端口访问服务
我们设置的用户默认就是administrator用户,进入容器查看

(python3_env) lin@iZ2zefq26zde:~$ docker exec -it myrabbit3 bash
root@rabbit3:/# rabbitmqctl list_users
Listing users
shilin	[administrator]

然后就可以开始搭建集群了
进入myrabbit1 容器 docker exec -it myrabbit1 bash ,
执行 rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl start_app && exit

(python3_env) lin@iZ2zefq26zde3v:~$ docker exec -it myrabbit1 bash
root@rabbit1:/# rabbitmqctl stop_app &&  rabbitmqctl reset && rabbitmqctl start_app && exit
Stopping rabbit application on node rabbit@rabbit1
Resetting node rabbit@rabbit1
Starting node rabbit@rabbit1
exit

进入myrabbit2 容器 docker exec -it myrabbit2 bash ,
执行 rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl join_cluster --ram rabbit@rabbit1 && rabbitmqctl start_app && exit

(python3_env) lin@iZ2zefq26zde3vcgsd:~$ docker exec -it myrabbit2 bash
root@rabbit2:/# rabbitmqctl stop_app &&  rabbitmqctl reset && rabbitmqctl join_cluster --ram rabbit@rabbit1 && rabbitmqctl start_app && exit
Stopping rabbit application on node rabbit@rabbit2
Resetting node rabbit@rabbit2
Clustering node rabbit@rabbit2 with rabbit@rabbit1
Starting node rabbit@rabbit2
exit

进入myrabbit3 容器 docker exec -it myrabbit3 bash ,
执行 rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl join_cluster --ram rabbit@rabbit1 && rabbitmqctl start_app && exit

(python3_env) lin@iZ2zefq26zde3vcgsd3gzrZ:~$  docker exec -it myrabbit3 bash
root@rabbit3:/# rabbitmqctl stop_app &&  rabbitmqctl reset && rabbitmqctl join_cluster --ram rabbit@rabbit1 && rabbitmqctl start_app && exit
Stopping rabbit application on node rabbit@rabbit3
Resetting node rabbit@rabbit3
Clustering node rabbit@rabbit3 with rabbit@rabbit1
Starting node rabbit@rabbit3
exit

如何判断已经将节点加入进来了呢,打开网页,看到 三个节点就说明成功了
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值