GVKun编程网logo

docker 中安装了 rabbitmq 后无法连接(docker安装rabbitmq配置环境)

3

对于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配置环境)

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)

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)

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)

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 四部曲之二:细说 RabbitMQ 镜像制作

本章是《Docker 下 RabbitMQ 四部曲》系列的第二篇,将详细简述 Docker 下制作 RabbitMQ 镜像的技术细节,包括以下内容:

  1. 列举制作 RabbitMQ 镜像时用到的所有材料;
  2. 编写 Dockerfile;
  3. 编写容器启动时执行的脚本 startrabbit.sh;
  4. 单机版 RabbtiMQ 环境的 docker-compose.yml 说明;
  5. 集群版 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 镜像要做的事情

先整理出我们需要一个什么样的镜像:

  1. 基础镜像为 centos:7;
  2. 时区:Asia/Shanghai;
  3. 编码:zh_CN.UTF-8;
  4. 装好了 Erlang;
  5. 装好了 RabbitMQ;
  6. 集群时候各个 RabbitMQ 机器之间的访问权限是通过 erlang.cookie 来控制的,所以在镜像中提前准备好 erlang.cookie,这样使用该镜像的所有容器由于 erlang.cookie 相同,就有了相互访问的权限;
  7. 创建容器时,可以通过参数来控制容器身份,例如集群版的主或者从,如果是身份是从,还要让从知道主的地址;
  8. 创建容器时,可以通过参数设置 RabbitMQ,例如用户名和密码、是否是内存节点、是否是高可用的镜像队列;

以上就是 RabbitMQ 镜像所具备的功能,其中 1-6 都可以在 Dockerfile 中实现,7 和 8 是在容器启动后要做的事情,所以要做个 shell 脚本来完成,容器创建时自动执行这个脚本;

准备镜像制作材料

根据前面列出的功能点,我们需要准备下面以下材料来制作镜像:

  1. Dockerfile:制作 Docker 镜像必须的脚本文件
  2. erlang.cookie:允许多个 RabbitMQ 容器相互访问的权限文件
  3. rabbitmq.config:RabbitMQ 配置文件
  4. 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

这个脚本有以下几点需要注意:

  1. if [ -z “$CLUSTERED” ] 表示如果环境变量中没有 CLUSTERED 这个参数;
  2. 如果环境变量中没有 CLUSTERED 这个参数,当前容器的身份就是主,会调用 change_default_user 方法,这个方法中检查是否输入了用户名和密码,如果有就创建用户,并赋予管理员权限,再把原有的 guest 账号删除;
  3. 如果环境变量中有 CLUSTERED 这个参数,当前容器身份就是从,会执行 rabbitmqctl join_cluster 命令加入到集群中去;
  4. 如果环境变量中有 RAM_NODE 这个参数,会在 rabbitmqctl join_cluster 命令中带上 ram 参数,表示当前节点为内存节点;
  5. 如果环境变量中有 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 的配置:

  1. 没有 CLUSTERED 参数,表示该容器以主的身份运行;
  2. 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

这个脚本有以下几点需要注意:

  1. rabbit1 是主节点;
  2. rabbit2 和 rabbit3 由于设置了 CLUSTERED,身份成为从节点,在 startrabbit.sh 脚本中,会通过 rabbitmqctl join_cluster 命令加入到主节点的集群中去,加入时如何找到主节点呢?用的是 CLUSTER_WITH 参数,而 CLUSTER_WITH 参数的值,在 docker-compose.yml 中通过 link 参数设置为 rabbit1;
  3. 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 镜像制作等更多相关知识的信息可以在本站进行查询。

本文标签: