对于docker中安装了rabbitmq后无法连接感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解docker安装rabbitmq配置环境,并且为您提供关于CentOS-Docker安装Ra
对于docker 中安装了 rabbitmq 后无法连接感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解docker安装rabbitmq配置环境,并且为您提供关于CentOS-Docker 安装 RabbitMQ 集群 (rabbitmq:3.7.16-management)、CentOS-Docker安装RabbitMQ集群(rabbitmq:3.7.16-management)、CentOS-Docker安装RabbitMQ集群(rabbitmq:3.8.9-management)、Docker 下 RabbitMQ 四部曲之二:细说 RabbitMQ 镜像制作的宝贵知识。
本文目录一览:- docker 中安装了 rabbitmq 后无法连接(docker安装rabbitmq配置环境)
- CentOS-Docker 安装 RabbitMQ 集群 (rabbitmq:3.7.16-management)
- CentOS-Docker安装RabbitMQ集群(rabbitmq:3.7.16-management)
- CentOS-Docker安装RabbitMQ集群(rabbitmq:3.8.9-management)
- Docker 下 RabbitMQ 四部曲之二:细说 RabbitMQ 镜像制作
docker 中安装了 rabbitmq 后无法连接(docker安装rabbitmq配置环境)
当时安装时用的这个命令
docker run -d --hostname my-rabbit --name some-rabbit -p 8080:15672 rabbitmq:3-management
之后只可以在本机上通过 docker 的 ip 访问得到管理页面,然而 rabbitmq 却不能访问得到,怀疑是安装时端口映射问题,于是
改成用这个命令安装就好了
docker run -d --hostname my-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3.7.7-management
CentOS-Docker 安装 RabbitMQ 集群 (rabbitmq:3.7.16-management)
准备工作
1. 机器资源 (分别安装 docker 环境)
建议机器配置: centos7.x 4G 及以上 100GB 及以上 2 核及以上
192.168.1.101
192.168.1.102
192.168.1.103
2. 分别配置 hosts 文件,追加
$ vim /home/rabbitmq/hosts
192.168.1.101 rabbit1 rabbit1
192.168.1.102 rabbit2 rabbit2
192.168.1.103 rabbit3 rabbit3
下载镜像(每台机器)
$ docker pull rabbitmq:3.7.16-management
创建目录 (每台机器)
$ mkdir -p /home/rabbitmq
运行镜像(每台机器)
创建容器 (rabbit1)
$ docker run --restart=unless-stopped -h rabbit1 -d -p 5672:5672 -p 15672:15672 -p 25672:25672 -p 4369:4369 --name myrabbit1 \
-v /home/rabbitmq:/var/lib/rabbitmq:z -v /home/rabbitmq/hosts:/etc/hosts \
-e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 -e RABBITMQ_ERLANG_COOKIE=''xxx_2019'' rabbitmq:3.7.16-management
创建容器 (rabbit2)
$ docker run --restart=unless-stopped -h rabbit2 -d -p 5672:5672 -p 15672:15672 -p 25672:25672 -p 4369:4369 --name myrabbit2 \
-v /home/rabbitmq:/var/lib/rabbitmq:z -v /home/rabbitmq/hosts:/etc/hosts \
-e RABBITMQ_ERLANG_COOKIE=''xxx_2019'' rabbitmq:3.7.16-management
创建容器 (rabbit3)
$ docker run --restart=unless-stopped -h rabbit3 -d -p 5672:5672 -p 15672:15672 -p 25672:25672 -p 4369:4369 --name myrabbit3 \
-v /home/rabbitmq:/var/lib/rabbitmq:z -v /home/rabbitmq/hosts:/etc/hosts \
-e RABBITMQ_ERLANG_COOKIE=''xxx_2019'' rabbitmq:3.7.16-management
参数说明
#容器后台运行
-d
#容器的主机名为 rabbit_master,容器内部的 hostname
--hostname rabbit_master
#将宿主机目录 /home/rabbitmq 挂载到容器的 /var/lib/rabbitmq 目录。z 是一个标记,在 selinux 环境下使用。
-v /home/rabbitmq:/var/lib/rabbitmq:z
#设置 rabbitmq 的 cookie 可以自定义为其他文本,三个容器保持一致即可。
-e RABBITMQ_ERLANG_COOKIE=''xxx_2019''
绑定集群
将 myrabbit1 节点重置
$ docker exec -it myrabbit1 bash
$ rabbitmqctl stop_app && \
rabbitmqctl reset && \
rabbitmqctl start_app
将 myrabbit2 节点加入集群
$ docker exec -it myrabbit2 bash
$ rabbitmqctl stop_app && \
rabbitmqctl reset && \
rabbitmqctl join_cluster rabbit@rabbit1 && \
rabbitmqctl start_app
将 myrabbit3 节点加入集群
$ docker exec -it myrabbit3 bash
$ rabbitmqctl stop_app && \
rabbitmqctl reset && \
rabbitmqctl join_cluster rabbit@rabbit2 && \
rabbitmqctl start_app
查询集群状态
$ rabbitmqctl cluster_status
故障节点的处理
$ docker exec -it rabbit2 /bin/bash
$ rabbitmqctl stop_app
#在一个正常的节点上移除有问题的节点
$ docker exec -it rabbit1 /bin/bash
$ rabbitmqctl forget_cluster_node rabbit@rabbit2
使用说明
springboot 集成
spring.rabbitmq.addresses=192.168.1.101:5672,192.168.1.102:5672,192.168.1.103:5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=123456
spring.rabbitmq.virtual-host=/#支持手动 ack 模式
spring.rabbitmq.listener.simple.acknowledge-mode=manual
#每个并发的预取条数
spring.rabbitmq.listener.simple.prefetch=10
#并发数
spring.rabbitmq.listener.simple.concurrency=3
#最大并发数
spring.rabbitmq.listener.simple.max-concurrency=10
spring.rabbitmq.listener.direct.acknowledge-mode=manual
队列模式分为普通模式和镜像模式,集群模式建议直接使用镜像队列
1. 全部节点镜像策略创建
2. 指定节点数镜像策略创建
参数说明
Pattern 模式:"^" 为全部;"^all-" 为所有 all - 开头
Priority 优先级:建议 10,比较耗费资源
Definition 定义参数:
ha-mode=all 或 exactly;
ha-sync-mode=automatic;
ha-params=2(ha-mode=exactly);
CentOS-Docker安装RabbitMQ集群(rabbitmq:3.7.16-management)
准备工作
1.机器资源(分别安装docker环境)
建议机器配置: centos7.x 4G及以上 100GB及以上 2核及以上
192.168.1.101
192.168.1.102
192.168.1.103
2.分别配置hosts文件,追加
$ vim /home/rabbitmq/hosts
192.168.1.101 rabbit1 rabbit1
192.168.1.102 rabbit2 rabbit2
192.168.1.103 rabbit3 rabbit3
下载镜像(每台机器)
$ docker pull rabbitmq:3.7.16-management
创建目录 (每台机器)
$ mkdir -p /home/rabbitmq
运行镜像(每台机器)
创建容器(rabbit1)
$ docker run --restart=unless-stopped -h rabbit1 -d -p 5672:5672 -p 15672:15672 -p 25672:25672 -p 4369:4369 --name myrabbit1 \
-v /home/rabbitmq:/var/lib/rabbitmq:z -v /home/rabbitmq/hosts:/etc/hosts \
-e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 -e RABBITMQ_ERLANG_COOKIE='xxx_2019' rabbitmq:3.7.16-management
创建容器(rabbit2)
$ docker run --restart=unless-stopped -h rabbit2 -d -p 5672:5672 -p 15672:15672 -p 25672:25672 -p 4369:4369 --name myrabbit2 \
-v /home/rabbitmq:/var/lib/rabbitmq:z -v /home/rabbitmq/hosts:/etc/hosts \
-e RABBITMQ_ERLANG_COOKIE='xxx_2019' rabbitmq:3.7.16-management
创建容器(rabbit3)
$ docker run --restart=unless-stopped -h rabbit3 -d -p 5672:5672 -p 15672:15672 -p 25672:25672 -p 4369:4369 --name myrabbit3 \
-v /home/rabbitmq:/var/lib/rabbitmq:z -v /home/rabbitmq/hosts:/etc/hosts \
-e RABBITMQ_ERLANG_COOKIE='xxx_2019' rabbitmq:3.7.16-management
参数说明
#容器后台运行
-d
#容器的主机名为 rabbit_master,容器内部的hostname
--hostname rabbit_master
#将宿主机目录/home/rabbitmq挂载到容器的/var/lib/rabbitmq目录。z是一个标记,在selinux环境下使用。
-v /home/rabbitmq:/var/lib/rabbitmq:z
#设置rabbitmq的cookie可以自定义为其他文本,三个容器保持一致即可。
-e RABBITMQ_ERLANG_COOKIE='xxx_2019'
绑定集群
将myrabbit1节点重置
$ docker exec -it myrabbit1 bash
$ rabbitmqctl stop_app && \
rabbitmqctl reset && \
rabbitmqctl start_app
将myrabbit2节点加入集群
$ docker exec -it myrabbit2 bash
$ rabbitmqctl stop_app && \
rabbitmqctl reset && \
rabbitmqctl join_cluster rabbit@rabbit1 && \
rabbitmqctl start_app
将myrabbit3节点加入集群
$ docker exec -it myrabbit3 bash
$ rabbitmqctl stop_app && \
rabbitmqctl reset && \
rabbitmqctl join_cluster rabbit@rabbit2 && \
rabbitmqctl start_app
查询集群状态
$ rabbitmqctl cluster_status
故障节点的处理
$ docker exec -it rabbit2 /bin/bash
$ rabbitmqctl stop_app
#在一个正常的节点上移除有问题的节点
$ docker exec -it rabbit1 /bin/bash
$ rabbitmqctl forget_cluster_node rabbit@rabbit2
使用说明
springboot集成
spring.rabbitmq.addresses=192.168.1.101:5672,192.168.1.102:5672,192.168.1.103:5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=123456
spring.rabbitmq.virtual-host=/#支持手动ack模式
spring.rabbitmq.listener.simple.ackNowledge-mode=manual
#每个并发的预取条数
spring.rabbitmq.listener.simple.prefetch=10
#并发数
spring.rabbitmq.listener.simple.concurrency=3
#最大并发数
spring.rabbitmq.listener.simple.max-concurrency=10
spring.rabbitmq.listener.direct.ackNowledge-mode=manual
队列模式分为普通模式和镜像模式,集群模式建议直接使用镜像队列
1.全部节点镜像策略创建
2.指定节点数镜像策略创建
参数说明
Pattern 模式:"^"为全部;"^all-"为所有all-开头
Priority 优先级:建议10,比较耗费资源
DeFinition 定义参数:
ha-mode=all 或 exactly;
ha-sync-mode=automatic;
ha-params=2(ha-mode=exactly);
CentOS-Docker安装RabbitMQ集群(rabbitmq:3.8.9-management)
准备工作
1.机器资源(分别安装docker环境)
建议机器配置: centos7.x 4G及以上 100GB及以上 2核及以上
192.168.1.101
192.168.1.102
192.168.1.103
2.分别配置hosts文件,追加
$ vim /home/rabbitmq/hosts
192.168.1.101 rabbit1 rabbit1
192.168.1.102 rabbit2 rabbit2
192.168.1.103 rabbit3 rabbit3
下载镜像(每台机器)
$ docker pull rabbitmq:3.8.9-management
创建目录 (每台机器)
$ mkdir -p /home/rabbitmq
运行镜像(每台机器)
创建容器(rabbit1)
$ docker run --restart=unless-stopped -h rabbit1 -d -p 5672:5672 -p 15672:15672 -p 25672:25672 -p 4369:4369 --name myrabbit1 \
-v /home/rabbitmq:/var/lib/rabbitmq:z -v /home/rabbitmq/hosts:/etc/hosts \
-e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 rabbitmq:3.8.9-management
创建容器(rabbit2)
$ docker run --restart=unless-stopped -h rabbit2 -d -p 5672:5672 -p 15672:15672 -p 25672:25672 -p 4369:4369 --name myrabbit2 \
-v /home/rabbitmq:/var/lib/rabbitmq:z -v /home/rabbitmq/hosts:/etc/hosts \
rabbitmq:3.8.9-management
创建容器(rabbit3)
$ docker run --restart=unless-stopped -h rabbit3 -d -p 5672:5672 -p 15672:15672 -p 25672:25672 -p 4369:4369 --name myrabbit3 \
-v /home/rabbitmq:/var/lib/rabbitmq:z -v /home/rabbitmq/hosts:/etc/hosts \
rabbitmq:3.8.9-management
参数说明
#容器后台运行
-d
#容器的主机名为 rabbit1,容器内部的hostname
-h rabbit1
#将宿主机目录/home/rabbitmq挂载到容器的/var/lib/rabbitmq目录。z是一个标记,在selinux环境下使用。
-v /home/rabbitmq:/var/lib/rabbitmq:z
#设置rabbitmq的cookie可以自定义为其他文本,三个容器保持一致即可。
-e RABBITMQ_ERLANG_COOKIE=''xxx_2020'' 参数已过期,需要修改erlang.cookie
机器分别配置并重启容器(erlang.cookie)
$ chmod 600 /home/rabbitmq/.erlang.cookie
$ vim /home/rabbitmq/.erlang.cookie
xxx_2020
绑定集群
将myrabbit1节点重置
$ docker exec -it myrabbit1 bash
$ rabbitmqctl stop_app && \
rabbitmqctl reset && \
rabbitmqctl start_app
将myrabbit2节点加入集群
$ docker exec -it myrabbit2 bash
$ rabbitmqctl stop_app && \
rabbitmqctl reset && \
rabbitmqctl join_cluster rabbit@rabbit1 && \
rabbitmqctl start_app
将myrabbit3节点加入集群
$ docker exec -it myrabbit3 bash
$ rabbitmqctl stop_app && \
rabbitmqctl reset && \
rabbitmqctl join_cluster rabbit@rabbit2 && \
rabbitmqctl start_app
查询集群状态
$ rabbitmqctl cluster_status
故障节点的处理
$ docker exec -it rabbit2 /bin/bash
$ rabbitmqctl stop_app
#在一个正常的节点上移除有问题的节点
$ docker exec -it rabbit1 /bin/bash
$ rabbitmqctl forget_cluster_node rabbit@rabbit2
使用说明
springboot集成
spring.rabbitmq.addresses=192.168.1.101:5672,192.168.1.102:5672,192.168.1.103:5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=123456
spring.rabbitmq.virtual-host=/#支持手动ack模式
spring.rabbitmq.listener.simple.acknowledge-mode=manual
#每个并发的预取条数
spring.rabbitmq.listener.simple.prefetch=10
#并发数
spring.rabbitmq.listener.simple.concurrency=3
#最大并发数
spring.rabbitmq.listener.simple.max-concurrency=10
spring.rabbitmq.listener.direct.acknowledge-mode=manual
队列模式分为普通模式和镜像模式,集群模式建议直接使用镜像队列
1.全部节点镜像策略创建
2.指定节点数镜像策略创建
参数说明
Pattern 模式:"^"为全部;"^all-"为所有all-开头
Priority 优先级:建议10,比较耗费资源
Definition 定义参数:
ha-mode=all 或 exactly;
ha-sync-mode=automatic;
ha-params=2(ha-mode=exactly);
Docker 下 RabbitMQ 四部曲之二:细说 RabbitMQ 镜像制作
本章是《Docker 下 RabbitMQ 四部曲》系列的第二篇,将详细简述 Docker 下制作 RabbitMQ 镜像的技术细节,包括以下内容:
- 列举制作 RabbitMQ 镜像时用到的所有材料;
- 编写 Dockerfile;
- 编写容器启动时执行的脚本 startrabbit.sh;
- 单机版 RabbtiMQ 环境的 docker-compose.yml 说明;
- 集群版 RabbitMQ 环境的 docker-compose.yml 说明;
原文地址:https://blog.csdn.net/boling_cavalry/article/details/80297358
文件和源码下载
您可以在 GitHub 下载本文涉及到的文件和源码,地址和链接信息如下表所示:
名称 | 链接 | 备注 |
---|---|---|
项目主页 | https://github.com/zq2599/blog_demos | 该项目在 GitHub 上的主页 |
git 仓库地址 (https) | https://github.com/zq2599/blog_demos.git | 该项目源码的仓库地址,https 协议 |
git 仓库地址 (ssh) | git@github.com:zq2599/blog_demos.git | 该项目源码的仓库地址,ssh 协议 |
这个 git 项目中有多个文件夹,本章所需的内容在 rabbitmq_docker_files 文件夹,如下图红框所示:
接下来开始镜像制作吧;
RabbitMQ 镜像要做的事情
先整理出我们需要一个什么样的镜像:
- 基础镜像为 centos:7;
- 时区:Asia/Shanghai;
- 编码:zh_CN.UTF-8;
- 装好了 Erlang;
- 装好了 RabbitMQ;
- 集群时候各个 RabbitMQ 机器之间的访问权限是通过 erlang.cookie 来控制的,所以在镜像中提前准备好 erlang.cookie,这样使用该镜像的所有容器由于 erlang.cookie 相同,就有了相互访问的权限;
- 创建容器时,可以通过参数来控制容器身份,例如集群版的主或者从,如果是身份是从,还要让从知道主的地址;
- 创建容器时,可以通过参数设置 RabbitMQ,例如用户名和密码、是否是内存节点、是否是高可用的镜像队列;
以上就是 RabbitMQ 镜像所具备的功能,其中 1-6 都可以在 Dockerfile 中实现,7 和 8 是在容器启动后要做的事情,所以要做个 shell 脚本来完成,容器创建时自动执行这个脚本;
准备镜像制作材料
根据前面列出的功能点,我们需要准备下面以下材料来制作镜像:
- Dockerfile:制作 Docker 镜像必须的脚本文件
- erlang.cookie:允许多个 RabbitMQ 容器相互访问的权限文件
- rabbitmq.config:RabbitMQ 配置文件
- startrabbit.sh:容器创建时执行的脚本
这些材料在 github 上都能获取到,地址:https://github.com/zq2599/blog_demos/tree/master/rabbitmq_docker_files/image
erlang.cookie 和 rabbitmq.config 很简单不需多说,我们细看 Dockerfile 和 startrabbit.sh;
Dockerfile
Dockerfile 是制作镜像时执行的脚本,内容如下:
# Docker file for rabbitmq single or cluster from bolingcavalry
# VERSION 0.0.3
# Author: bolingcavalry
#基础镜像
FROM centos:7
#作者
MAINTAINER BolingCavalry <zq2599@gmail.com>
#定义时区参数
ENV TZ=Asia/Shanghai
#设置时区
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo ''$TZ'' > /etc/timezone
#设置编码为中文
RUN yum -y install kde-l10n-Chinese glibc-common
RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
ENV LC_ALL zh_CN.utf8
#安装wget工具
RUN yum install -y wget unzip tar
#安装erlang
RUN rpm -Uvh https://github.com/rabbitmq/erlang-rpm/releases/download/v19.3.6.5/erlang-19.3.6.5-1.el7.centos.x86_64.rpm
RUN yum install -y erlang
#安装rabbitmq
RUN rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
RUN yum install -y https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.5-rc.1/rabbitmq-server-3.7.5.rc.1-1.el7.noarch.rpm
RUN /usr/sbin/rabbitmq-plugins list <<<''y''
#安装常用插件
RUN /usr/sbin/rabbitmq-plugins enable --offline rabbitmq_mqtt rabbitmq_stomp rabbitmq_management rabbitmq_management_agent rabbitmq_federation rabbitmq_federation_management <<<''y''
#添加配置文件
ADD rabbitmq.config /etc/rabbitmq/
#添加cookie,使集群环境中的机器保持互通
ADD erlang.cookie /var/lib/rabbitmq/.erlang.cookie
#添加启动容器时执行的脚本,主要根据启动时的入参做集群设置
ADD startrabbit.sh /opt/rabbit/
#给相关资源赋予权限
RUN chmod u+rw /etc/rabbitmq/rabbitmq.config \
&& chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie \
&& chmod 400 /var/lib/rabbitmq/.erlang.cookie \
&& mkdir -p /opt/rabbit \
&& chmod a+x /opt/rabbit/startrabbit.sh
#暴露常用端口
EXPOSE 5672
EXPOSE 15672
EXPOSE 25672
EXPOSE 4369
EXPOSE 9100
EXPOSE 9101
EXPOSE 9102
EXPOSE 9103
EXPOSE 9104
EXPOSE 9105
#设置容器创建时执行的脚本
CMD /opt/rabbit/startrabbit.sh
如上所示,每个功能都有对应的注释,就不再赘述了;
容器启动后执行的脚本 startrabbit.sh
startrabbit.sh 内容如下:
#!/bin/bash
change_default_user() {
if [ -z $RABBITMQ_DEFAULT_USER ] && [ -z $RABBITMQ_DEFAULT_PASS ]; then
echo "Maintaining default ''guest'' user"
else
echo "Removing ''guest'' user and adding ${RABBITMQ_DEFAULT_USER}"
rabbitmqctl delete_user guest
rabbitmqctl add_user $RABBITMQ_DEFAULT_USER $RABBITMQ_DEFAULT_PASS
rabbitmqctl set_user_tags $RABBITMQ_DEFAULT_USER administrator
rabbitmqctl set_permissions -p / $RABBITMQ_DEFAULT_USER ".*" ".*" ".*"
fi
}
HOSTNAME=`env hostname`
if [ -z "$CLUSTERED" ]; then
# if not clustered then start it normally as if it is a single server
/usr/sbin/rabbitmq-server &
rabbitmqctl wait /var/lib/rabbitmq/mnesia/rabbit\@$HOSTNAME.pid
change_default_user
tail -f /var/log/rabbitmq/rabbit\@$HOSTNAME.log
else
if [ -z "$CLUSTER_WITH" ]; then
# If clustered, but cluster with is not specified then again start normally, could be the first server in the
# cluster
/usr/sbin/rabbitmq-server&
rabbitmqctl wait /var/lib/rabbitmq/mnesia/rabbit\@$HOSTNAME.pid
tail -f /var/log/rabbitmq/rabbit\@$HOSTNAME.log
else
/usr/sbin/rabbitmq-server &
rabbitmqctl wait /var/lib/rabbitmq/mnesia/rabbit\@$HOSTNAME.pid
rabbitmqctl stop_app
if [ -z "$RAM_NODE" ]; then
rabbitmqctl join_cluster rabbit@$CLUSTER_WITH
else
rabbitmqctl join_cluster --ram rabbit@$CLUSTER_WITH
fi
rabbitmqctl start_app
# If set ha flag, enable here
if [ -z "$HA_ENABLE" ]; then
echo "Running with normal cluster mode"
else
rabbitmqctl set_policy HA ''^(?!amq\.).*'' ''{"ha-mode": "all"}''
echo "Running wiht HA cluster mode"
fi
# Tail to keep the a foreground process active..
tail -f /var/log/rabbitmq/rabbit\@$HOSTNAME.log
fi
fi
这个脚本有以下几点需要注意:
- if [ -z “$CLUSTERED” ] 表示如果环境变量中没有 CLUSTERED 这个参数;
- 如果环境变量中没有 CLUSTERED 这个参数,当前容器的身份就是主,会调用 change_default_user 方法,这个方法中检查是否输入了用户名和密码,如果有就创建用户,并赋予管理员权限,再把原有的 guest 账号删除;
- 如果环境变量中有 CLUSTERED 这个参数,当前容器身份就是从,会执行 rabbitmqctl join_cluster 命令加入到集群中去;
- 如果环境变量中有 RAM_NODE 这个参数,会在 rabbitmqctl join_cluster 命令中带上 ram 参数,表示当前节点为内存节点;
- 如果环境变量中有 HA_ENABLE 这个参数,就在启动 RabbitMQ 之后执行命令 rabbitmqctl set_policy,将集群中的队列变为镜像队列,实现集群高可用;
构建镜像
以上就是制作镜像前的准备工作,完成之后在 Dockerfile 文件所在目录下执行命令 docker build -t bolingcavalry/rabbitmq-server:0.0.3 .,即可构建镜像;
单机版的 docker-compose.yml
这个 docker-compose.yml 在上一章我们用过,内容如下:
rabbitmq:
image: bolingcavalry/rabbitmq-server:0.0.3
hostname: rabbitmq
ports:
- "15672:15672"
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=888888
producer:
image: bolingcavalry/rabbitmqproducer:0.0.2-SNAPSHOT
hostname: producer
links:
- rabbitmq:rabbitmqhost
ports:
- "18080:8080"
environment:
- mq.rabbit.address=rabbitmqhost:5672
- mq.rabbit.username=admin
- mq.rabbit.password=888888
consumer:
image: bolingcavalry/rabbitmqconsumer:0.0.3-SNAPSHOT
hostname: consumer
links:
- rabbitmq:rabbitmqhost
environment:
- mq.rabbit.address=rabbitmqhost:5672
- mq.rabbit.username=admin
- mq.rabbit.password=888888
- mq.rabbit.queue.name=consumer.queue
producer 和 consumer 的配置我们下一章再看,现在重点关注 rabbitmq 的配置:
- 没有 CLUSTERED 参数,表示该容器以主的身份运行;
- RABBITMQ_DEFAULT_USER、RABBITMQ_DEFAULT_PASS 这两个参数设定了此 RabbitMQ 的管理员权限的账号和密码;
集群版的 docker-compose.yml
内容如下:
version: ''2''
services:
rabbit1:
image: bolingcavalry/rabbitmq-server:0.0.3
hostname: rabbit1
ports:
- "15672:15672"
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=888888
rabbit2:
image: bolingcavalry/rabbitmq-server:0.0.3
hostname: rabbit2
depends_on:
- rabbit1
links:
- rabbit1
environment:
- CLUSTERED=true
- CLUSTER_WITH=rabbit1
- RAM_NODE=true
ports:
- "15673:15672"
rabbit3:
image: bolingcavalry/rabbitmq-server:0.0.3
hostname: rabbit3
depends_on:
- rabbit2
links:
- rabbit1
- rabbit2
environment:
- CLUSTERED=true
- CLUSTER_WITH=rabbit1
ports:
- "15675:15672"
producer:
image: bolingcavalry/rabbitmqproducer:0.0.2-SNAPSHOT
hostname: producer
depends_on:
- rabbit3
links:
- rabbit1:rabbitmqhost
ports:
- "18080:8080"
environment:
- mq.rabbit.address=rabbitmqhost:5672
- mq.rabbit.username=admin
- mq.rabbit.password=888888
consumer1:
image: bolingcavalry/rabbitmqconsumer:0.0.3-SNAPSHOT
hostname: consumer1
depends_on:
- producer
links:
- rabbit2:rabbitmqhost
environment:
- mq.rabbit.address=rabbitmqhost:5672
- mq.rabbit.username=admin
- mq.rabbit.password=888888
- mq.rabbit.queue.name=consumer1.queue
consumer2:
image: bolingcavalry/rabbitmqconsumer:0.0.3-SNAPSHOT
hostname: consumer2
depends_on:
- consumer1
links:
- rabbit3:rabbitmqhost
environment:
- mq.rabbit.address=rabbitmqhost:5672
- mq.rabbit.username=admin
- mq.rabbit.password=888888
- mq.rabbit.queue.name=consumer2.queue
这个脚本有以下几点需要注意:
- rabbit1 是主节点;
- rabbit2 和 rabbit3 由于设置了 CLUSTERED,身份成为从节点,在 startrabbit.sh 脚本中,会通过 rabbitmqctl join_cluster 命令加入到主节点的集群中去,加入时如何找到主节点呢?用的是 CLUSTER_WITH 参数,而 CLUSTER_WITH 参数的值,在 docker-compose.yml 中通过 link 参数设置为 rabbit1;
- rabbit2 设置了 RAM_NODE,所以是个内存节点;
至此,整个 RabbitMQ 镜像制作和使用的详细分析就结束了,您也可以自行实战,在 Dockerfile 和 startrabbit.sh 中增加一些命令来对 RabbitMQ 做更多个性化的设置,下一章,我们开发两个基于 SpringBoot 的工程,分别用来生产和消费消息;
参考并致敬:https://github.com/bijukunjummen/docker-rabbitmq-cluster
欢迎关注我的公众号:程序员欣宸
本文分享 CSDN - 程序员欣宸。
如有侵权,请联系 support@oschina.cn 删除。
本文参与 “OSC 源创计划”,欢迎正在阅读的你也加入,一起分享。
今天关于docker 中安装了 rabbitmq 后无法连接和docker安装rabbitmq配置环境的介绍到此结束,谢谢您的阅读,有关CentOS-Docker 安装 RabbitMQ 集群 (rabbitmq:3.7.16-management)、CentOS-Docker安装RabbitMQ集群(rabbitmq:3.7.16-management)、CentOS-Docker安装RabbitMQ集群(rabbitmq:3.8.9-management)、Docker 下 RabbitMQ 四部曲之二:细说 RabbitMQ 镜像制作等更多相关知识的信息可以在本站进行查询。
本文标签: