RabbitMQ标准软件基于Bitnami RabbitMQ 构建。当前版本为3.12
你可以通过轻云UC部署工具直接安装部署,也可以手动按如下文档操作,该项目已经全面开源,可以从如下环境获取
开源地址: https://gitee.com/qingplus/qingcloud-platform
连接容器
使用Docker 容器网络,应用程序容器可以轻松访问容器内运行的 RabbitMQ 服务器。
连接到同一网络的容器可以使用容器名称作为主机名来相互通信。
使用命令行
在此示例中,我们将创建一个 RabbitMQ 客户端实例,该实例将连接到与客户端在同一 Docker 网络上运行的服务器实例。
第 1 步:创建网络
docker network create app-tier --driver bridge
第 2 步:启动 RabbitMQ 服务器实例
使用命令--network app-tier的参数docker run将 RabbitMQ 容器连接到网络app-tier。
docker run -d --name rabbitmq-server \
--network app-tier \
registry.cn-hangzhou.aliyuncs.com/qingcloudtech/rabbitmq:latest
第 3 步:启动 RabbitMQ 客户端实例
最后,我们创建一个新的容器实例来启动 RabbitMQ 客户端并连接到上一步中创建的服务器:
docker run -it --rm \
--network app-tier \
registry.cn-hangzhou.aliyuncs.com/qingcloudtech/rabbitmq:latest rabbitmqctl -n rabbit@rabbitmq-server status
使用 Docker Compose 文件
如果未指定,Docker Compose 会自动设置一个新网络并将所有已部署的服务附加到该网络。但是,我们将显式定义一个bridge名为app-tier的新网络。在此示例中,我们假设您希望从您自己的自定义应用程序映像连接到 RabbitMQ 服务器,该映像在以下代码片段中通过服务名称进行标识myapp。
version: '2'
networks:
app-tier:
driver: bridge
services:
rabbitmq:
image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/rabbitmq:latest'
networks:
- app-tier
myapp:
image: 'YOUR_APPLICATION_IMAGE'
networks:
- app-tier
重要:
1.替换YOUR_APPLICATION_IMAGE占位符
2.在您的应用程序容器中,使用主机名rabbitmq
连接到 RabbitMQ 服务器
启动容器:
docker-compose up -d
配置
环境变量
当您启动rabbitmq镜像时,您可以通过在docker-compose文件或docker run命令行上传递一个或多个环境变量来调整实例的配置。
对于 docker-compose,在docker-compose.yml添加变量名称和值:
rabbitmq:
...
environment:
- RABBITMQ_PASSWORD=my_password
...
对于手动执行,-e为每个变量和值添加一个选项。
可用变量:
节点和集群配置
- RABBITMQ_VHOST:RabbitMQ 应用程序虚拟主机。默认:/
- RABBITMQ_USERNAME:RabbitMQ 应用程序用户名。默认:user
- RABBITMQ_PASSWORD:RabbitMQ应用程序密码。默认值:bitnami
- RABBITMQ_SECURE_PASSWORD:是否安全设置RabbitMQ密码。这与加载外部 RabbitMQ 定义不兼容。默认值:no
- RABBITMQ_LOAD_DEFINITIONS:是否加载外部RabbitMQ定义。这与安全设置 RabbitMQ 密码不兼容。默认值:no。
- RABBITMQ_ERL_COOKIE:Erlang cookie,用于确定不同节点是否允许相互通信。
- RABBITMQ_NODE_TYPE:节点类型。有效值:stats、queue-ram或queue-disc。默认值:stats
- RABBITMQ_NODE_NAME:节点名称和主机。例如:node@hostname或node(本地主机在集群拓扑中不起作用)。默认的rabbit@localhost。如果使用此变量,请确保指定有效的主机名,否则容器将无法启动。如果使用完全限定域名,RABBITMQ_USE_LONGNAME也需要设置为true
- RABBITMQ_USE_LONGNAME:当设置为true时,这将导致 RabbitMQ 使用完全限定名称来标识节点。默认值:false
- RABBITMQ_FORCE_BOOT:强制启动节点,即使它不是最后一个关闭的节点。默认值:no
- RABBITMQ_CLUSTER_NODE_NAME:集群的节点名称。例如:clusternode@主机名
- RABBITMQ_CLUSTER_PARTITION_HANDLING:集群分区恢复机制。默认:ignore
- RABBITMQ_NODE_PORT_NUMBER:节点端口。默认值:5672
- RABBITMQ_NODE_SSL_PORT_NUMBER:SSL 连接的 RabbitMQ 节点端口号。默认值:5671
- RABBITMQ_SSL_CACERTFILE:RabbitMQ 服务器 SSL CA 证书文件的路径。没有默认值。
- RABBITMQ_SSL_CERTFILE:RabbitMQ 服务器 SSL 证书文件的路径。没有默认值。
- RABBITMQ_SSL_KEYFILE:RabbitMQ 服务器 SSL 证书密钥文件的路径。没有默认值。
- RABBITMQ_COMBINED_CERT_PATH:证书文件和密钥文件会自动合并到此文件路径中的一个合并文件中。如果您无论如何都使用组合证书,请将其安装到容器并将此路径设置为安装的文件。默认值:/tmp/rabbitmq_combined_keys.pem
- RABBITMQ_SSL_DEPTH:在有效证书路径中可以跟随对等证书的非自行颁发的中间证书的最大数量。没有默认值。
- RABBITMQ_SSL_FAIL_IF_NO_PEER_CERT:如果客户端无法提供证书,是否拒绝 TLS 连接。默认值:verify_none
- RABBITMQ_SSL_VERIFY:是否启用对端SSL证书验证。默认值:否
- RABBITMQ_PLUGINS:逗号、分号或空格分隔的插件列表,在初始化期间启用。没有默认值。
- RABBITMQ_COMMUNITY_PLUGINS:逗号、分号或空格分隔的 URL 列表,在初始化期间下载自定义插件。没有默认值。
管理服务器配置
- RABBITMQ_MANAGEMENT_BIND_IP:RabbitMQ管理服务器绑定IP地址。默认值:0.0.0.0
- RABBITMQ_MANAGEMENT_PORT_NUMBER:RabbitMQ 管理服务器端口号。默认值:15672
- RABBITMQ_MANAGEMENT_ALLOW_WEB_ACCESS:允许通过 Web 访问 RabbitMQ 管理门户RABBITMQ_USERNAME。默认值:false
- RABBITMQ_MANAGEMENT_SSL_PORT_NUMBER:用于 SSL/TLS 连接的 RabbitMQ 管理服务器端口号。默认值:15671。
- RABBITMQ_MANAGEMENT_SSL_CACERTFILE:RabbitMQ 管理服务器 SSL CA 证书文件的路径。没有默认值:$RABBITMQ_SSL_CACERTFILE。
- RABBITMQ_MANAGEMENT_SSL_CERTFILE:RabbitMQ 管理服务器 SSL 证书文件的路径。默认值:$RABBITMQ_SSL_CERTFILE。
- RABBITMQ_MANAGEMENT_SSL_KEYFILE:RabbitMQ 管理服务器 SSL 证书密钥文件的路径。默认值:$RABBITMQ_SSL_KEYFILE。
- RABBITMQ_MANAGEMENT_SSL_DEPTH:对于 RabbitMQ 管理服务器,在有效证书路径中可以跟随对等证书的非自行颁发中间证书的最大数量。没有默认值。
- RABBITMQ_MANAGEMENT_SSL_FAIL_IF_NO_PEER_CERT:如果客户端无法为 RabbitMQ 管理服务器提供证书,是否拒绝 TLS 连接。默认值:yes
- RABBITMQ_MANAGEMENT_SSL_VERIFY:是否为RabbitMQ管理服务器启用对等SSL证书验证。默认值:verify_peer
LDAP配置
- RABBITMQ_ENABLE_LDAP:启用 LDAP 配置。默认值:no
- RABBITMQ_LDAP_TLS:启用安全 LDAP 配置。默认值:no
- RABBITMQ_LDAP_SERVERS:逗号、分号或空格分隔的 LDAP 服务器主机名列表。没有默认值。
- RABBITMQ_LDAP_SERVERS_PORT:LDAP 服务器端口。默认值:389
- RABBITMQ_LDAP_USER_DN_PATTERN:DN用于绑定到LDAP的形式cn=$${username},dc=example,dc=org。没有默认值。
内存和磁盘配置
- RABBITMQ_VM_MEMORY_HIGH_WATERMARK:RabbitMQ 的高内存水印可阻止发布者并防止新消息排队。可以指定为绝对值或相对值(百分比或 0 到 1 之间的值)。没有默认值。
- RABBITMQ_DISK_FREE_RELATIVE_LIMIT:RabbitMQ 存储数据的分区的磁盘相对可用空间限制。默认值:1.0
- RABBITMQ_DISK_FREE_ABSOLUTE_LIMIT:RabbitMQ 存储数据的分区的磁盘绝对可用空间限制(优先于相对限制)。没有默认值。
- RABBITMQ_ULIMIT_NOFILES:资源限制:打开文件描述符的最大数量。默认值:65536
设置集群
使用 Docker 组合
这是使用集群配置运行 RabbitMQ 的最简单方法:
第 1 步:在您的docker-compose.yml
将下面的代码片段复制到 docker-compose.yml 中,将 RabbitMQ stats 节点添加到集群配置中。
version: '2'
services:
stats:
image: registry.cn-hangzhou.aliyuncs.com/qingcloudtech/rabbitmq
environment:
- RABBITMQ_NODE_TYPE=stats
- RABBITMQ_NODE_NAME=rabbit@stats
- RABBITMQ_ERL_COOKIE=s3cr3tc00ki3
ports:
- '15672:15672'
volumes:
- 'rabbitmqstats_data:/bitnami/rabbitmq/mnesia'
注意:服务的名称 ( stats ) 很重要,以便节点可以解析主机名以进行集群。(注意节点名称是rabbit@stats)
第 2 步:在配置中添加队列节点
更新您想要用于 RabbitMQ stats 节点集群的节点的定义。
queue-disc1:
image: registry.cn-hangzhou.aliyuncs.com/qingcloudtech/rabbitmq
environment:
- RABBITMQ_NODE_TYPE=queue-disc
- RABBITMQ_NODE_NAME=rabbit@queue-disc1
- RABBITMQ_CLUSTER_NODE_NAME=rabbit@stats
- RABBITMQ_ERL_COOKIE=s3cr3tc00ki3
volumes:
- 'rabbitmqdisc1_data:/bitnami/rabbitmq/mnesia'
注意:同样,服务的名称 ( queue-disc1 ) 很重要,以便每个节点都可以解析该服务的主机名。
我们还将添加一个 ram 节点:
queue-ram1:
image: registry.cn-hangzhou.aliyuncs.com/qingcloudtech/rabbitmq
environment:
- RABBITMQ_NODE_TYPE=queue-ram
- RABBITMQ_NODE_NAME=rabbit@queue-ram1
- RABBITMQ_CLUSTER_NODE_NAME=rabbit@stats
- RABBITMQ_ERL_COOKIE=s3cr3tc00ki3
volumes:
- 'rabbitmqram1_data:/bitnami/rabbitmq/mnesia'
第 3 步:添加卷描述
volumes:
rabbitmqstats_data:
driver: local
rabbitmqdisc1_data:
driver: local
rabbitmqram1_data:
driver: local
它将docker-compose.yml看起来像这样:
version: '2'
services:
stats:
image: registry.cn-hangzhou.aliyuncs.com/qingcloudtech/rabbitmq
environment:
- RABBITMQ_NODE_TYPE=stats
- RABBITMQ_NODE_NAME=rabbit@stats
- RABBITMQ_ERL_COOKIE=s3cr3tc00ki3
ports:
- '15672:15672'
volumes:
- 'rabbitmqstats_data:/bitnami/rabbitmq/mnesia'
queue-disc1:
image: registry.cn-hangzhou.aliyuncs.com/qingcloudtech/rabbitmq
environment:
- RABBITMQ_NODE_TYPE=queue-disc
- RABBITMQ_NODE_NAME=rabbit@queue-disc1
- RABBITMQ_CLUSTER_NODE_NAME=rabbit@stats
- RABBITMQ_ERL_COOKIE=s3cr3tc00ki3
volumes:
- 'rabbitmqdisc1_data:/bitnami/rabbitmq/mnesia'
queue-ram1:
image: registry.cn-hangzhou.aliyuncs.com/qingcloudtech/rabbitmq
environment:
- RABBITMQ_NODE_TYPE=queue-ram
- RABBITMQ_NODE_NAME=rabbit@queue-ram1
- RABBITMQ_CLUSTER_NODE_NAME=rabbit@stats
- RABBITMQ_ERL_COOKIE=s3cr3tc00ki3
volumes:
- 'rabbitmqram1_data:/bitnami/rabbitmq/mnesia'
volumes:
rabbitmqstats_data:
driver: local
rabbitmqdisc1_data:
driver: local
rabbitmqram1_data:
driver: local
配置文件
可以将自定义rabbitmq.conf配置文件挂载到该/bitnami/rabbitmq/conf目录。如果没有挂载文件,容器会根据环境变量生成一个默认文件。advanced.config您还可以将您自己的文件(使用经典的 Erlang 术语)和配置文件挂载到此目录rabbitmq-env.conf。
作为替代方案,您还可以挂载custom.conf配置文件并将其挂载到/bitnami/rabbitmq/conf目录中。在这种情况下,将生成默认配置文件,稍后,custom.conf配置文件中的可用设置将与默认设置合并。例如,为了覆盖该listeners.tcp.default指令:
第 1 步:编写包含以下内容的 custom.conf 配置文件
listeners.tcp.default=1337
第 2 步:运行 RabbitMQ 挂载您的 custom.conf 配置文件
docker run -d --name rabbitmq-server \
-v /path/to/custom.conf:/bitnami/rabbitmq/conf/custom.conf:ro \
registry.cn-hangzhou.aliyuncs.com/qingcloudtech/rabbitmq:latest
之后,您的更改将被考虑到服务器的行为中。
SSL/TLS 证书和密钥文件的权限
如果将证书和密钥文件从本地主机绑定挂载到容器,请确保设置这些文件的正确所有权和权限:
sudo chown 1001:root <your cert/key files>
sudo chmod 400 <your cert/key files>
启用 LDAP 支持
如果您希望为 RabbitMQ 启用 LDAP 支持,则必须指定 LDAP 配置参数。以下环境变量可用于配置 LDAP 支持:
- RABBITMQ_ENABLE_LDAP:启用 LDAP 配置。默认为no.
- RABBITMQ_LDAP_TLS:启用安全 LDAP 配置。默认为no.
- RABBITMQ_LDAP_SERVERS:逗号、分号或空格分隔的 LDAP 服务器主机名列表。没有默认值。
- RABBITMQ_LDAP_SERVERS_PORT:LDAP 服务器端口。默认值:389
- RABBITMQ_LDAP_USER_DN_PATTERN:用于以 LDAP 形式绑定到 LDAP 的 DN cn=$${username},dc=example,dc=org。无默认值。
注意:要转义$,RABBITMQ_LDAP_USER_DN_PATTERN您需要使用$$.
按照以下说明创建 OpenLDAP 服务器并使用它对 RabbitMQ 上的用户进行身份验证:
步骤1:创建网络并启动 OpenLDAP 服务器
docker network create app-tier --driver bridge
docker run --name openldap \
--env LDAP_ADMIN_USERNAME=admin \
--env LDAP_ADMIN_PASSWORD=adminpassword \
--env LDAP_USERS=user01,user02 \
--env LDAP_PASSWORDS=password1,password2 \
--network app-tier \
registry.cn-hangzhou.aliyuncs.com/qingcloudtech/openldap:latest
步骤2:创建advanced.config文件
要配置授权,您需要按照clasic config 格式创建一个 advance.config 文件,并添加您的授权规则。例如,使用下面的文件授予所有用户使用管理插件的能力,但不让他们成为管理员:
[{rabbitmq_auth_backend_ldap,[
{tag_queries, [{administrator, {constant, false}},
{management, {constant, true}}]}
]}].
步骤3:启动具有 LDAP 支持的 RabbitMQ
docker run --name rabbitmq \
--env RABBITMQ_ENABLE_LDAP=yes \
--env RABBITMQ_LDAP_TLS=no \
--env RABBITMQ_LDAP_SERVERS=openldap \
--env RABBITMQ_LDAP_SERVERS_PORT=1389 \
--env RABBITMQ_LDAP_USER_DN_PATTERN=cn=$${username},ou=users,dc=example,dc=org \
--network app-tier \
-v /path/to/your/advanced.config:/bitnami/rabbitmq/conf/advanced.config:ro \
registry.cn-hangzhou.aliyuncs.com/qingcloudtech/rabbitmq:latest
日志
docker logs rabbitmq
或使用 Docker Compose:
docker-compose logs rabbitmq