跳至主内容
版本:4.2

配置

概述

RabbitMQ 附带默认的内置设置。在某些环境(例如开发和 QA)中,这些设置可能完全足够。对于所有其他情况,以及 生产部署调整,都有方法可以配置代理中的许多内容以及 插件

本指南涵盖了与配置相关的多个主题

等等。

由于配置会影响系统的许多方面,包括插件,因此各个 文档指南 会更深入地探讨可配置的内容。运行时调整 是本指南的补充,侧重于运行时可配置的参数。部署指南 是一个相关指南,概述了大多数生产环境中可能需要调整的设置。

配置方式

RabbitMQ 节点可以通过多种机制进行配置,这些机制负责不同的区域

配置 RabbitMQ 的方式
机制描述

配置文件(s)

包含 TCP 监听器和其他 网络相关设置TLS资源限制(警报)身份验证和授权后端消息存储设置 等的服务器和插件设置。

环境变量

用于定义 节点名称、文件和目录位置、从 shell 获取的运行时标志,或在环境配置文件 rabbitmq-env.conf(Linux、MacOS、BSD)和 rabbitmq-env-conf.bat(Windows)中设置。

rabbitmqctl

当使用 内部身份验证/授权后端 时,rabbitmqctl 是管理虚拟主机、用户和权限的工具。它还用于管理 运行时参数和策略

rabbitmq-queues

rabbitmq-queues 是管理 仲裁队列 特定设置的工具。

rabbitmq-plugins

rabbitmq-plugins 是管理 插件 的工具。

rabbitmq-diagnostics

rabbitmq-diagnostics 允许检查节点状态,包括有效配置,以及许多其他指标和 运行状况检查

参数和策略

定义可实时更改的群集范围设置,以及方便为队列组(交换器等)配置的设置,例如包含可选队列参数。

运行时(Erlang VM)标志

控制系统的低级方面:内存分配设置、节点间通信缓冲区大小、运行时调度程序设置等。

操作系统内核限制

控制内核强制执行的进程限制:最大打开文件句柄限制、最大进程数和内核线程数、最大驻留集大小等。

大多数设置都使用前两种方法进行配置。因此,本指南重点介绍它们。

配置文件

简介

虽然 RabbitMQ 的某些设置可以通过环境变量进行调整,但大多数设置是通过名为 rabbitmq.conf主配置文件 进行配置的。

这包括核心服务器和插件的配置。可以另外使用一个配置文件来配置主文件配置格式无法表达的设置。这将在下文中更详细地介绍。

以下各节将介绍这两种文件的语法和 位置、查找示例的地点等等。

配置文件位置

默认配置文件位置 因操作系统和 软件包类型 而异。

本指南的其余部分将更详细地介绍此主题。

如有疑问,请参阅日志文件和/或管理 UI,具体方法如下一节所述。

如何查找配置文件位置

可以通过检查 RabbitMQ 日志文件来验证活动配置文件。它会显示在 日志文件 的顶部,以及其他代理启动日志条目。例如

node           : rabbit@example
home dir : /var/lib/rabbitmq
config file(s) : /etc/rabbitmq/advanced.config
: /etc/rabbitmq/rabbitmq.conf

如果 RabbitMQ 找不到或无法读取配置文件,日志条目会告知

node           : rabbit@example
home dir : /var/lib/rabbitmq
config file(s) : /var/lib/rabbitmq/hare.conf (not found)

或者,要查找本地节点使用的配置文件位置,请使用 rabbitmq-diagnostics status 命令

# displays key
rabbitmq-diagnostics status

并查找 Config files 部分,该部分应如下所示

Config files

* /etc/rabbitmq/advanced.config
* /etc/rabbitmq/rabbitmq.conf

要检查特定节点(包括远程节点)的位置,请使用 -n--node 的缩写)开关

rabbitmq-diagnostics status -n [node name]

最后,可以在 管理 UI 中找到配置文件位置,以及有关节点的其他详细信息。

在对配置设置进行故障排除时,在 验证有效节点配置 之前,检查配置文件路径是否正确、是否存在且是否可以加载(例如,文件是否可读)非常有帮助。结合这些步骤,可以快速缩小最常见的配置错误问题范围。

现代和旧的配置文件格式

所有 支持的 RabbitMQ 版本 都使用 类似 ini 的 sysctl 配置文件格式 作为主配置文件。该文件通常命名为 rabbitmq.conf

新配置格式更简单,更易于人类阅读和机器生成。与 RabbitMQ 3.7.0 之前使用的经典配置格式相比,它也相对有限。例如,在配置 LDAP 支持 时,可能需要使用深度嵌套的数据结构来表示所需的配置。

为了满足此需求,现代 RabbitMQ 版本允许在单独的文件中同时使用这两种格式:rabbitmq.conf 使用新样式格式,推荐用于大多数设置,而 advanced.config 涵盖了 ini 样式配置无法表达的更高级设置。这将在以下各节中更详细地介绍。

配置文件使用的格式目的
rabbitmq.conf新样式格式(sysctl 或类 ini)

主配置文件,扩展名为 .conf。应尽可能多地用于设置。它更易于人类阅读和机器(部署工具)生成。并非所有设置都可以用此格式表示。

advanced.config经典格式(Erlang 术语)

少数无法在新样式配置格式中表示的设置,例如 LDAP 查询。仅在必要时使用。

rabbitmq-env.conf(Windows 上为 rabbitmq-env.conf.bat环境变量对

用于在一个地方设置与 RabbitMQ 相关的 环境变量

比较这个示例 rabbitmq.conf 文件

# A new style format snippet. This format is used by rabbitmq.conf files.
ssl_options.cacertfile = /path/to/ca_certificate.pem
ssl_options.certfile = /path/to/server_certificate.pem
ssl_options.keyfile = /path/to/server_key.pem
ssl_options.verify = verify_peer
ssl_options.fail_if_no_peer_cert = true

更改为

%% A classic format snippet, now used by advanced.config files.
[
{rabbit, [{ssl_options, [{cacertfile, "/path/to/ca_certificate.pem"},
{certfile, "/path/to/server_certificate.pem"},
{keyfile, "/path/to/server_key.pem"},
{verify, verify_peer},
{fail_if_no_peer_cert, true}]}]}
].

主配置文件 rabbitmq.conf

配置文件 rabbitmq.conf 允许配置 RabbitMQ 服务器和插件。该文件使用 sysctl 格式,与 advanced.config 和原始 rabbitmq.config(均使用 Erlang 术语格式)不同。

语法可以简要说明如下

  • 一个设置占一行
  • 行结构为 Key = Value
  • # 字符开头的任何内容都是注释
  • 包含 # 字符的值,例如生成的字符串、生成的密码、加密值等,可以用单引号转义,如下所示:'efd3!53a9@92#a08_d_6d'
  • encrypted: 为前缀的值被视为 加密值

一个极简的示例配置文件如下

# this is a comment
listeners.tcp.default = 5673

上面的示例等同于以下 经典配置格式

%% this is a comment
[
{rabbit, [
{tcp_listeners, [5673]}
]
}
].

此示例将把 RabbitMQ 监听 AMQP 0-9-1 和 AMQP 1.0 客户端连接的 端口 从 5672 更改为 5673。

一个使用值转义的极简示例

# this is a comment
default_user = '40696e180b610ed9'
default_pass = 'efd3!53a9@_2#a08'

这等同于以下 经典配置格式

%% this is a comment
[
{rabbit, [
{default_user, <<"40696e180b610ed9">>},
{default_pass, <<"efd3!53a9@_2#a08">>}
]
}
].

RabbitMQ 服务器源代码存储库包含 一个示例 rabbitmq.conf 文件,名为 rabbitmq.conf.example。它包含了您可能想要设置的大多数配置项的示例(省略了一些非常晦涩的),以及这些设置的文档。

网络、TLS访问控制 等文档指南包含了许多相关格式的示例。

请注意,此配置文件不应与环境变量配置文件混淆,即 rabbitmq-env.conf rabbitmq-env-conf.bat

要覆盖主 RabbitMQ 配置文件位置,请使用 RABBITMQ_CONFIG_FILE(或 RABBITMQ_CONFIG_FILES 以使用 conf.d 风格的已排序文件目录)环境变量。对新样式配置文件格式使用 .conf 作为文件扩展名,例如 /etc/rabbitmq/rabbitmq.conf/data/configuration/rabbitmq.conf

值转义

重要

使用转义值的行不得包含任何(尤其是尾随)注释。请将任何必要的注释放在该行上方。

包含 # 字符的值,通常是机器生成的,可以用单引号转义

# escaping is not necessary here but may be a good idea for generated
# values
default_user = '7f11ddc4f1900a233964'
# escaping is important here as without it,
# the # character and everything that follows it would be
# considered a comment
default_pass = 'efd3!53a9@92#a08_d_6d'

使用 .conf 文件目录

也可以使用 conf.d 风格的文件目录。使用 RABBITMQ_CONFIG_FILES(注意是复数 "_FILES")将节点指向该文件目录

# uses a directory of .conf files loaded in alphabetical order
RABBITMQ_CONFIG_FILES=/path/to/a/custom/location/rabbitmq/conf.d

目标目录必须包含与 rabbitmq.conf 语法相同的多个 .conf 文件。

它们将按字母顺序加载。常见的命名实践使用数字前缀来方便理解顺序,或确保“默认文件”始终首先加载,无论部署时生成了多少额外文件。

ls -lh /path/to/a/custom/location/rabbitmq/conf.d
# => -r--r--r-- 1 rabbitmq rabbitmq 87B Mar 21 19:50 00-defaults.conf
# => -r--r--r-- 1 rabbitmq rabbitmq 4.6K Mar 21 19:52 10-main.conf
# => -r--r--r-- 1 rabbitmq rabbitmq 1.6K Mar 21 19:52 20-tls.conf
# => -r--r--r-- 1 rabbitmq rabbitmq 1.6K Mar 21 19:52 30-federation.conf

rabbitmq.conf 中的环境变量插值

现代 RabbitMQ 版本 支持 rabbitmq.conf 中的环境变量插值。例如,要覆盖默认用户凭据,可以使用 导入定义文件 或结合两个环境变量的以下配置文件

# environment variable interpolation
default_user = $(SEED_USERNAME)
default_pass = $(SEED_USER_PASSWORD)

环境变量可用于配置值的某一部分,例如群集名称

cluster_name = deployment-$(DEPLOYMENT_ID)

在解析和验证配置文件之前,环境变量值会作为字符串进行插值。这意味着它们可用于覆盖数值设置(如端口)或路径(如 TLS 证书和私钥路径)。

此外,RabbitMQ 遵循 一系列环境变量,以便在加载配置文件之前需要知道值。

advanced.config 文件

信息

本节描述了已被 现代替代方案 取代的原始配置格式。

只有有限的功能和高级(或很少使用)的设置才需要使用此格式。当有此选项时,请使用 rabbitmq.conf

使用 sysctl 格式配置某些配置设置是不可能的或困难的。因此,可以使用 Erlang 术语格式(与 rabbitmq.config 相同)的附加配置文件。该文件通常命名为 advanced.config。它将与 rabbitmq.conf 中提供的配置合并。

RabbitMQ 服务器源代码存储库包含 一个示例 advanced.config 文件,名为 advanced.config.example。它侧重于通常使用高级配置设置的选项。

要覆盖高级配置文件位置,请使用 RABBITMQ_ADVANCED_CONFIG_FILE 环境变量。

rabbitmq.conf, advanced.config 和 rabbitmq-env.conf 的位置

默认配置文件位置因发行版而异。RabbitMQ 软件包或节点不会创建任何配置文件。用户和部署工具应在创建文件时使用以下位置

平台默认配置文件目录示例配置文件路径

通用二进制包

$RABBITMQ_HOME/etc/rabbitmq/

$RABBITMQ_HOME/etc/rabbitmq/rabbitmq.conf, $RABBITMQ_HOME/etc/rabbitmq/advanced.config

Debian 和 Ubuntu

/etc/rabbitmq/

/etc/rabbitmq/rabbitmq.conf, /etc/rabbitmq/advanced.config

基于 RPM 的 Linux

/etc/rabbitmq/

/etc/rabbitmq/rabbitmq.conf, /etc/rabbitmq/advanced.config

Windows

%APPDATA%\RabbitMQ\

%APPDATA%\RabbitMQ\rabbitmq.conf, %APPDATA%\RabbitMQ\advanced.config

MacOS Homebrew Formula

${install_prefix}/etc/rabbitmq/,Homebrew cellar 前缀通常是 /usr/local

${install_prefix}/etc/rabbitmq/rabbitmq.conf, ${install_prefix}/etc/rabbitmq/advanced.config

环境变量可用于覆盖配置文件位置

# overrides primary config file location
RABBITMQ_CONFIG_FILE=/path/to/a/custom/location/rabbitmq.conf

# overrides advanced config file location
RABBITMQ_ADVANCED_CONFIG_FILE=/path/to/a/custom/location/advanced.config

# overrides environment variable file location
RABBITMQ_CONF_ENV_FILE=/path/to/a/custom/location/rabbitmq-env.conf

配置文件的更改何时生效

rabbitmq.confadvanced.config 的更改将在节点重启后生效。

如果 rabbitmq-env.conf 不存在,可以在 RABBITMQ_CONF_ENV_FILE 变量指定的位置手动创建。在 Windows 系统上,它名为 rabbitmq-env-conf.bat

Windows 服务用户需要重新安装服务,如果配置文件位置或 rabbitmq-env-conf.bat 中的任何值已更改。否则,服务使用的环境变量将不会更新。

在自动化部署的背景下,这意味着 RABBITMQ_BASERABBITMQ_CONFIG_FILE 等环境变量最好在安装 RabbitMQ 之前设置。这将有助于避免不必要的混淆和 Windows 服务重新安装。

如何检查和验证运行中节点的有效配置

可以使用 rabbitmq-diagnostics environment 命令打印有效配置(来自所有合并到默认值中的配置文件的用户提供的值)

# inspect effective configuration on a node
rabbitmq-diagnostics environment

要检查特定节点(包括远程节点)的有效配置,请使用 -n--node 的缩写)开关

rabbitmq-diagnostics environment -n [node name]

上面的命令将打印节点上运行的每个应用程序(RabbitMQ、插件、库)的应用配置。有效配置的计算步骤如下

  • rabbitmq.conf 被翻译成内部使用的(高级)配置格式。这些配置被合并到默认值中
  • 如果存在,则加载 advanced.config,并合并到上一步的结果中

应与 配置文件位置 一起验证有效配置。结合这些步骤,可以快速缩小最常见的配置错误问题范围。

rabbitmq.config(经典格式)文件

在 RabbitMQ 3.7.0 之前,RabbitMQ 配置文件名为 rabbitmq.config,并使用 与今天 advanced.config 相同的 Erlang 术语格式。该格式仍然支持 向后兼容。

经典格式已弃用。请优先使用 rabbitmq.conf 中的 新样式配置格式,并根据需要配合 advanced.config 文件。

要使用经典格式的配置文件,请将 RABBITMQ_CONFIG_FILE 导出到指向具有 .config 扩展名的文件。该扩展名将指示 RabbitMQ 将该文件视为经典配置格式。

一个名为 rabbitmq.config.example 的示例配置文件。它包含经典配置格式中大多数配置项的示例。

要覆盖主 RabbitMQ 配置文件位置,请使用 RABBITMQ_CONFIG_FILE 环境变量。对于经典配置格式,请使用 .config 作为文件扩展名。

经典配置格式的使用应仅限于 advanced.config 文件 和无法使用 ini 样式配置文件 配置的设置。

示例配置文件

RabbitMQ 服务器源代码存储库包含配置文件的示例

这些文件包含大多数配置键的示例,以及对这些设置的简要说明。所有配置项在示例中都被注释掉了,您可以取消注释您需要的项。请注意,示例文件应仅作为示例使用,不应被视为通用建议。

在大多数发行版中,示例文件被放置在与实际文件应放置的位置相同的地方(参见上文)。在 Debian 和 RPM 发行版中,策略禁止这样做;相反,请在 /usr/share/doc/rabbitmq-server//usr/share/doc/rabbitmq-server-4.2.0/ 下查找该文件。

rabbitmq.conf 中可配置的核心服务器变量

这些变量是最常见的。列表不完整,因为有些设置非常晦涩。

文档
listeners.tcp

用于“纯”AMQP 0-9-1 和 AMQP 1.0 连接(无 TLS)监听的端口或主机名/对。有关更多详细信息和示例,请参阅 网络指南

默认

listeners.tcp.default = 5672
listeners.ssl

用于 TLS 启用的 AMQP 0-9-1 和 AMQP 1.0 连接监听的端口或主机名/对。有关更多详细信息和示例,请参阅 TLS 指南

默认:none(未设置)

ssl_options

TLS 配置。请参阅 TLS 指南

默认

ssl_options = none
num_acceptors.tcp

将接受 TCP 监听器连接的 Erlang 进程数。

默认

num_acceptors.tcp = 10
num_acceptors.ssl

将接受客户端 TLS 连接的 Erlang 进程数。

默认

num_acceptors.ssl = 10
distribution.listener.interface

控制将使用哪个网络接口与群集成员和 CLI 工具进行通信。

默认

distribution.listener.interface = 0.0.0.0
distribution.listener.port_range.min

控制将用于与群集成员和 CLI 工具通信的服务器端口范围的下限。

默认

distribution.listener.port_range.min = 25672
distribution.listener.port_range.max

控制将用于与群集成员和 CLI 工具通信的服务器端口范围的上限。

默认

distribution.listener.port_range.max = 25672
handshake_timeout

AMQP 0-9-1 握手的最长时间(在套接字连接和 TLS 握手之后),以毫秒为单位。

默认

handshake_timeout = 10000
ssl_handshake_timeout

TLS 握手超时,以毫秒为单位。

默认

ssl_handshake_timeout = 5000
vm_memory_high_watermark

触发流控制的内存阈值。可以是绝对值,也可以是相对于操作系统可用内存的比例。

vm_memory_high_watermark.relative = 0.7
vm_memory_high_watermark.absolute = 2GB

请参阅 基于内存的流控制警报 文档。

默认

vm_memory_high_watermark.relative = 0.6
vm_memory_calculation_strategy

内存使用报告策略。可以是以下之一:

  • allocated:使用 Erlang 内存分配器统计信息
  • rss:使用操作系统 RSS 内存报告。这使用特定于操作系统的机制,并可能启动短暂的子进程。
  • legacy:使用旧内存报告(认为运行时使用的内存量)。此策略相当不准确。
  • erlang:与 legacy 相同,为向后兼容而保留

默认

vm_memory_calculation_strategy = rss
total_memory_available_override_value

允许覆盖可用总内存量,而不是通过特定于操作系统的手段从环境中推断。这仅应在节点实际可用的最大 RAM 量与节点将推断的值不匹配时使用,例如由于节点无法感知的容器化或类似限制。该值可以设置为整数字节数,或者以信息单位(例如 8GB)表示。例如,当将值设置为 4 GB 时,节点将认为它运行在具有 4 GB RAM 的机器上。

默认:undefined(未设置或使用)。

disk_free_limit

RabbitMQ 存储数据的分区的可用磁盘空间限制。当可用磁盘空间低于此限制时,将触发流控制。该值可以设置为相对于总 RAM 量,或设置为字节的绝对值,或者以信息单位(例如 50MB5GB)表示。

disk_free_limit.absolute = 2GB

默认情况下,空闲磁盘空间必须超过 50MB。这必须重新审视以用于 生产环境。请参阅 磁盘警报 文档。

默认

disk_free_limit.absolute = 50MB
queue_leader_locator

控制在声明新队列或流时,用于选择托管首领副本的节点的 策略

log.file.level

控制日志记录的粒度。该值是日志事件类别和日志级别对的列表。

级别可以是以下之一:error(仅记录错误)、warning(仅记录错误和警告)、info(记录错误、警告和信息性消息),或 debug(记录错误、警告、信息性消息和调试消息)。

默认

log.file.level = info
session_max_per_connection

AMQP 1.0 连接上可同时激活的最大 AMQP 1.0 会话数。

默认:64
最小值:1
最大值:65535

link_max_per_session

AMQP 1.0 会话上可同时激活的最大 AMQP 1.0 链接数。

默认:256
最小值:1
最大值:4294967295

channel_max

允许与客户端协商的最大通道数,不包括协议中使用的特殊通道号 0。设置为 0 表示“无限制”,这是一个危险的值,因为应用程序有时会有通道泄露。使用更多通道会增加代理的内存占用。

默认

channel_max = 2047
channel_operation_timeout

通道操作超时(以毫秒为单位)(内部使用,由于消息协议差异和限制,不直接暴露给客户端)。

默认

channel_operation_timeout = 15000
max_message_size

允许的最大消息负载大小(以字节为单位)。大于此大小的消息将被拒绝并出现适当的通道异常。

默认:16777216
最大值:536870912

heartbeat

表示服务器在连接参数协商期间建议的心跳超时值。如果在两端都设置为 0,则会禁用心跳(不推荐)。有关详细信息,请参阅 心跳指南

默认

heartbeat = 60
default_vhost

当 RabbitMQ 从头开始创建新数据库时创建的虚拟主机。amq.rabbitmq.log 交换机将存在于此虚拟主机中。

默认

default_vhost = /
default_user

当 RabbitMQ 从头开始创建新数据库时创建的用户名。

默认

default_user = guest
default_pass

默认用户的密码。

默认

default_pass = guest
default_user_tags

默认用户的标签。

默认

default_user_tags.administrator = true
default_permissions

创建默认用户时分配给它的 权限

默认

default_permissions.configure = .*
default_permissions.read = .*
default_permissions.write = .*
loopback_users

仅允许通过环回接口(即 localhost)连接到代理的用户列表。

要允许默认的 guest 用户远程连接(不适用于生产使用的安全实践 ),请将其设置为 none

# awful security practice,
# consider creating a new
# user with secure generated credentials!
loopback_users = none

要将其他用户限制为仅本地连接,请按以下方式操作(monitoring 是用户的名称)

loopback_users.monitoring = true

默认

# guest uses well known
# credentials and can only
# log in from localhost
# by default
loopback_users.guest = true
cluster_formation.classic_config.nodes

经典 节点发现 后端的节点联系列表。

例如,首次启动时与节点 rabbit@hostname1rabbit@hostname2 进行集群

cluster_formation.classic_config.nodes.1 = rabbit@hostname1
cluster_formation.classic_config.nodes.2 = rabbit@hostname2
默认:none(未设置)
collect_statistics

统计信息收集模式。主要与管理插件相关。选项是:

  • none(不发出统计事件)
  • coarse(发出每个队列/每个通道/每个连接的统计信息)
  • fine(还发出每条消息的统计信息)

默认

collect_statistics = none
collect_statistics_interval

统计信息收集间隔(以毫秒为单位)。主要与 管理插件 相关。

默认

collect_statistics_interval = 5000
management.db_cache_multiplier

影响 管理插件 缓存昂贵管理查询(如队列列表)的时间。

缓存会将最后一次查询的经过时间乘以此值,并将结果缓存计算出的时间。

默认

management.db_cache_multiplier = 5
auth_mechanisms

SASL 身份验证机制 提供给客户端。

默认

# see the Access Control guide to learn more
auth_mechanisms.1 = PLAIN
auth_mechanisms.2 = AMQPLAIN
# see the Access Control and Deployment Guidelines guides to learn more
auth_mechanisms.3 = ANONYMOUS
auth_backends

要使用的 身份验证和授权后端 列表。有关详细信息和示例,请参阅 访问控制指南

除了 rabbit_auth_backend_internal 之外的其他数据库可通过 插件获得。

默认

auth_backends.1 = internal
reverse_dns_lookups

设置为 true 可让 RabbitMQ 对客户端连接执行反向 DNS 查找,并通过 rabbitmqctl 和管理插件提供该信息。

默认

reverse_dns_lookups = false
delegate_count

用于群集内通信的委托进程数。在一台拥有大量核心且也是群集一部分的机器上,您可能希望增加此值。

默认

delegate_count = 16
tcp_listen_options

默认套接字选项。当您对网络问题进行故障排除时,可能需要更改它们。

默认

tcp_listen_options.backlog = 128
tcp_listen_options.nodelay = true
tcp_listen_options.linger.on = true
tcp_listen_options.linger.timeout = 0

tcp_listen_options.exit_on_close = false

tcp_listen_options.exit_on_close 设置为 true 可让 RabbitMQ 在客户端断开连接时尝试立即关闭 TCP 套接字。请注意,这不能保证内核立即释放 TCP 套接字资源。


tcp_listen_options.keepalive = false

tcp_listen_options.keepalive 设置为 true 以启用 TCP Keepalive


cluster_partition_handling

如何处理网络分区。可用模式是:

  • ignore
  • autoheal
  • pause_minority
  • pause_if_all_down

pause_if_all_down 模式需要额外的参数

  • nodes
  • recover

有关更多信息,请参阅 分区文档

默认

cluster_partition_handling = ignore
cluster_keepalive_interval

节点应以多快的频率向其他节点发送 Keepalive 消息(以毫秒为单位)。请注意,这与 net_ticktime 不同;未收到 Keepalive 消息不会导致节点被视为宕机。

默认

cluster_keepalive_interval = 10000
queue_index_embed_msgs_below

消息的大小(以字节为单位),低于此值时,消息将直接嵌入队列索引中。建议您在更改此设置之前阅读 持久化调优 文档。

默认

queue_index_embed_msgs_below = 4096
mnesia_table_loading_retry_timeout

等待集群中的 Mnesia 表可用时使用的超时。

默认

mnesia_table_loading_retry_timeout = 30000
mnesia_table_loading_retry_limit

群集启动时等待 Mnesia 表的重试次数。请注意,此设置不适用于 Mnesia 升级或节点删除。

默认

mnesia_table_loading_retry_limit = 10
queue_leader_locator

队列首领定位策略。可用策略是:

  • balanced
  • client-local

默认

queue_leader_locator = client-local
proxy_protocol

如果设置为 true,RabbitMQ 将在打开 AMQP 连接时期望首先发送 代理协议 头。这意味着在 RabbitMQ 前面设置符合代理协议的反向代理(例如 HAproxyAWS ELB)。启用代理协议后,客户端无法直接连接到 RabbitMQ,因此所有连接都必须通过反向代理。

有关更多信息,请参阅 网络指南

默认

proxy_protocol = false
cluster_name

操作员控制的群集名称。此名称用于标识群集,并由 federation 和 Shovel 插件用于记录传输消息的来源或路径。可以设置为任何任意字符串来帮助标识群集(例如 london)。AMQP 0-9-1 客户端可以在服务器属性映射中检查此名称。

默认:默认情况下,该名称是从群集中的第一个(种子)节点派生的。

node_tags

可选节点标签(键值对)的映射。

以下配置设置只能在 高级配置文件 中,在 rabbit 部分下设置。

文档
backing_queue_module

队列内容的实现模块。

默认

{rabbit, [
{backing_queue_module, rabbit_variable_queue}
]}
msg_store_file_size_limit

消息存储段文件大小。更改具有现有(已初始化)数据库的节点的此设置是危险的,可能导致数据丢失!

默认:16777216

{rabbit, [
%% Changing this for a node
%% with an existing (initialised) database is dangerous and can
%% lead to data loss!
{msg_store_file_size_limit, 16777216}
]}
trace_vhosts

tracer 内部使用。您不应更改此项。

默认

{rabbit, [
{trace_vhosts, []}
]}
queue_index_max_journal_entries

队列索引日志条目达到多少条后会刷新到磁盘。

默认

{rabbit, [
{queue_index_max_journal_entries, 32768}
]}

RabbitMQ 附带的几个 插件 都有专门的文档指南,涵盖插件配置

群集和节点元数据

集群名称

默认情况下,群集名称设置为群集中第一个节点的名称。

可以通过 rabbitmq.conf 覆盖它

cluster_name = americas.ca.1

RabbitMQ 在 管理 UI 中显示此值。

还可以通过 列出全局运行时参数GET /api/global-parameters/cluster_name HTTP API 端点 来检查它。

群集标签

群集标签是描述群集的任意键值对。操作员可以使用它们来附加部署特定信息。

可以使用 rabbitmq.conf 配置群集标签

cluster_tags.series = 4.1.x

cluster_tags.purpose = iot_ingress
cluster_tags.region = ca-central-1
cluster_tags.environment = production

要检索标签列表,请列出 全局运行时参数 或获取名为 cluster_tags 的全局运行时参数,或者使用 rabbitmqadmin v2snow overview 命令。

rabbitmqadmin show overview

节点标签

节点标签

与群集标签类似,节点标签也可以通过 rabbitmq.conf 预先配置

node_tags.series = 4.1.x

node_tags.purpose = iot_ingress
node_tags.region = ca-central-1
node_tags.environment = production

可以使用 CLI 工具和 HTTP API 来检查节点标签。

rabbitmqadmin show overview

配置值加密

敏感的 advanced.config 和选定的 rabbitmq.conf 条目(例如密码、包含凭据的 URL)可以加密。然后 RabbitMQ 节点在启动时解密加密的条目。

提示

加密的配置条目不会使系统完全安全。

但是,它们允许 RabbitMQ 部署符合许多国家/地区的法规要求,即不应在配置文件中以纯文本形式出现敏感数据。

要使用加密值,需要执行几个步骤:

  1. 生成唯一的密码
  2. 使用 rabbitmqctl encrypt_conf_value(用于 rabbitmq.conf)或 rabbitmqctl encode(用于 advanced.config)加密值
  3. 使用 CLI 生成的值更新 rabbitmq.confadvanced.config
  4. advanced.config 中指定解码器的密码

使用 CLI 工具加密值

使用 rabbitmqctl encrypt_conf_value for rabbitmq.conf

使用 rabbitmqctlencrypt_conf_value 命令来加密将在 rabbitmq.conf 中使用的值

# <<"guest">> here is a value to encode, as an Erlang binary,
# to which many rabbitmq.conf string values are translated
rabbitmqctl -s encrypt_conf_value '<<"guest">>' mypassphrase
# => encrypted:3sPKxdusdbENvruAtF+Qtr71cEnZwE7nG/uqiakPyzEJsycJlyAKOKq4TSq2kDrl

# "amqp://fred:secret@host1.domain/my_vhost" here is a value to encode, provided as an Erlang string,
# to which some rabbitmq.conf string values are translated
rabbitmqctl -s encrypt_conf_value '"amqp://fred:secret@host1.domain/my_vhost"' "mypassphrase"
# => encrypted:3sPKxdusdbENvruAtF+Qtr71cEnZwE7nG/uqiakPyzEJsycJlyAKOKq4TSq2kDrl

使用 rabbitmqctl encode for advanced.config

使用 rabbitmqctlencode 命令来加密将在 advanced.config 中使用的值

# <<"guest">> here is a value to encode, as an Erlang binary,
# as it would have appeared in advanced.config
rabbitmqctl encode '<<"guest">>' mypassphrase
# => {encrypted,<<"... long encrypted value...">>}

# "amqp://fred:secret@host1.domain/my_vhost" here is a value to encode, provided as an Erlang string,
# as it would have appeared in advanced.config
rabbitmqctl encode '"amqp://fred:secret@host1.domain/my_vhost"' "mypassphrase"
# => {encrypted,<<"... long encrypted value...">>}

rabbitmq.conf 中的加密值

rabbitmq.conf 中,某些键的值可以加上 encrypted 前缀,例如:encrypted:3sPKxdusd

这些键是:

  • ssl_options.password
  • default_password
  • default_user.$username.password
  • definitions.tls.password
  • anonymous_login_pass

其他键不支持 encrypted:{value} 值。

要加密要在 rabbitmq.conf 中使用的值,请使用 rabbitmqctl -s encrypt_conf_value

# <<"guest">> here is a value to encode, as an Erlang binary,
# to which many rabbitmq.conf string values are translated
rabbitmqctl -s encrypt_conf_value '<<"guest">>' mypassphrase
# => encrypted:3sPKxdusdbENvruAtF+Qtr71cEnZwE7nG/uqiakPyzEJsycJlyAKOKq4TSq2kDrl

# "amqp://fred:secret@host1.domain/my_vhost" here is a value to encode, provided as an Erlang string,
# to which some rabbitmq.conf string values are translated
rabbitmqctl -s encrypt_conf_value '"amqp://fred:secret@host1.domain/my_vhost"' "mypassphrase"
# => encrypted:3sPKxdusdbENvruAtF+Qtr71cEnZwE7nG/uqiakPyzEJsycJlyAKOKq4TSq2kDrl

为解码器指定密码

rabbitmq.conf 中的值被加密时,密码仍然在 advanced.config 中配置

[
{rabbit, [
{config_entry_decoder, [
{passphrase, <<"mypassphrase">>}
]}
]}
].

advanced.config 迁移到 rabbitmq.conf

我们最初为 advanced.config 加密的值可以移动到 rabbitmq.conf

rabbitmqctl encode 会为 advanced.config 生成 {encrypted, Value} 对。它们必须转换为更简单的格式才能在 rabbitmq.conf 中使用。

例如,如果 rabbitmqctl encode 生成以下输出

{encrypted, <<"P1Vbf81vsU3QogIxSDlllHcsj+23Wy9vp9/Eyl14NRROqHjJRKdwsShyWqMSESMF">>}

此值必须在 rabbitmq.conf 中如此指定

default_user     = guest
# An equivalent of {encrypted, <<"P1Vbf81vsU3QogIxSDlllHcsj+23Wy9vp9/Eyl14NRROqHjJRKdwsShyWqMSESMF">>}
# in advanced.config
default_password = encrypted:P1Vbf81vsU3QogIxSDlllHcsj+23Wy9vp9/Eyl14NRROqHjJRKdwsShyWqMSESMF

advanced.config 中的加密值

这里是一个包含默认用户加密密码的配置文件示例

[
{rabbit, [
{default_user, <<"guest">>},
{default_pass,
{encrypted,
<<"cPAymwqmMnbPXXRVqVzpxJdrS8mHEKuo2V+3vt1u/fymexD9oztQ2G/oJ4PAaSb2c5N/hRJ2aqP/X0VAfx8xOQ==">>
}
},
{config_entry_decoder, [
{passphrase, <<"mypassphrase">>}
]}
]}
].

config_entry_decoder.passphrase 键控制 RabbitMQ 用于解密加密值的密码。

密码不必硬编码在配置文件中,它可以放在一个单独的文件中

[
{rabbit, [
%% ...
{config_entry_decoder, [
{passphrase, {file, "/path/to/passphrase/file"}}
]}
]}
].

RabbitMQ 还可以通过使用 {passphrase, prompt} 来请求操作员在启动时输入密码。

使用 CLI 工具解密值

使用 decode 命令解密值

rabbitmqctl decode '{encrypted, <<"...">>}' mypassphrase
# => <<"guest">>
rabbitmqctl decode '{encrypted, <<"...">>}' mypassphrase
# => "amqp://fred:secret@host1.domain/my_vhost"

可以对不同类型的值进行编码。

上面的示例对二进制(<<"guest">>)和字符串("amqp://fred:secret@host1.domain/my_vhost")都进行了编码。

加密设置:密码、哈希函数、迭代次数

加密机制使用 PBKDF2 从密码生成派生密钥。默认哈希函数为 SHA512,默认迭代次数为 1000。默认密码为 AES 256 CBC。

这些默认值可以在配置文件中更改

[
{rabbit, [
...
{config_entry_decoder, [
{passphrase, "mypassphrase"},
{cipher, blowfish_cfb64},
{hash, sha256},
{iterations, 10000}
]}
]}
].

如果任何值被覆盖,则在加密值时必须使用等效值,方法是使用 CLI 工具

# --cipher, --hash and --iterations must match their counterparts un `config_entry_decoder`
# in `advanced.config`
rabbitmqctl encode --cipher blowfish_cfb64 --hash sha256 --iterations 10000 \
'<<"guest">>' mypassphrase

使用环境变量配置

某些服务器参数可以通过环境变量进行配置:节点名称、RabbitMQ 配置文件位置节点间通信端口、Erlang VM 标志等。

目录和路径限制

一些环境变量配置路径和位置(节点的基目录或数据目录、插件 源目录和扩展目录等)。这些路径必须排除一些字符:

  • *?(在 Linux、macOS、BSD 和其他类 UNIX 系统上)
  • ^!(在 Windows 上)
  • []
  • {}

上述字符将导致节点无法启动或无法按预期工作(例如,无法扩展插件并加载其元数据)。

Linux、MacOS、BSD

在类 UNIX 系统(Linux、MacOS 和 BSD 各版本)上,可以使用一个名为 rabbitmq-env.conf 的文件来定义代理使用的环境变量。其 位置 可以通过 RABBITMQ_CONF_ENV_FILE 环境变量进行配置。

rabbitmq-env.conf 使用标准的​​环境变量名称,但省略 RABBITMQ_ 前缀。例如,RABBITMQ_CONFIG_FILE 变量在此处显示为 CONFIG_FILE,而 RABBITMQ_NODENAME 变为 NODENAME

# Example rabbitmq-env.conf file entries. Note that the variables
# do not have the RABBITMQ_ prefix.
#
# Overrides node name
NODENAME=bunny@myhost

# Specifies new style config file location
CONFIG_FILE=/etc/rabbitmq/rabbitmq.conf

# Specifies advanced config file location
ADVANCED_CONFIG_FILE=/etc/rabbitmq/advanced.config

有关详细信息,请参阅 rabbitmq-env.conf man page

Windows

自定义名称、端口或位置的最简单方法是在 Windows 对话框中配置环境变量:开始 > 设置 > 控制面板 > 系统 > 高级 > 环境变量。然后创建或编辑系统变量名称和值。

或者,可以使用一个名为 rabbitmq-env-conf.bat 的文件来定义代理使用的环境变量。其 位置 可以通过 RABBITMQ_CONF_ENV_FILE 环境变量进行配置。

Windows 服务用户需要重新安装服务,如果配置文件位置或 rabbitmq-env-conf.bat 中的任何值已更改。否则,服务使用的环境变量将不会更新。

这可以使用安装程序或在具有管理员权限的命令行中完成

  • 启动一个管理员命令提示符
  • cd 进入 RabbitMQ 服务器安装目录下的 sbin 文件夹(例如 C:\Program Files (x86)\RabbitMQ Server\rabbitmq_server-{version}\sbin
  • 运行 rabbitmq-service.bat stop 停止服务
  • 运行 rabbitmq-service.bat remove 删除 Windows 服务(这不会删除 RabbitMQ 或其数据目录)
  • 通过命令行设置环境变量,例如运行以下命令
    set RABBITMQ_BASE=C:\Data\RabbitMQ
  • 运行 rabbitmq-service.bat install
  • 运行 rabbitmq-service.bat start

这将以一种使环境变量和 rabbitmq-env-conf.bat 更改对其可见的方式重新启动节点。

RabbitMQ 使用的环境变量

RabbitMQ 使用的所有环境变量都带有 RABBITMQ_ 前缀(在 rabbitmq-env.confrabbitmq-env-conf.bat 中定义时除外)。

在 shell 环境中设置的环境变量优先于在 rabbitmq-env.confrabbitmq-env-conf.bat 中设置的环境变量,而后者又覆盖 RabbitMQ 的内置默认值。

下表描述了可用于配置 RabbitMQ 的关键环境变量。更多变量在 文件和目录位置指南 中介绍。

名称描述
RABBITMQ_NODE_IP_ADDRESS

如果您只想绑定到一个网络接口,请更改此项。可以在配置文件中设置绑定到两个或多个接口。

默认:空字符串,表示“绑定到所有网络接口”。

RABBITMQ_NODE_PORT

有关 RabbitMQ 各部分使用的端口的更多信息,请参阅 网络指南

默认: 5672.

RABBITMQ_DIST_PORT

用于节点间和 CLI 工具通信的端口。如果节点配置文件设置了 kernel.inet_dist_listen_minkernel.inet_dist_listen_max 键,则忽略。有关详细信息,请参阅 网络;有关 Windows 特定详细信息,请参阅 Windows 配置

默认RABBITMQ_NODE_PORT + 20000

ERL_MAX_PORTS

此限制对应于内核中的 最大打开文件句柄限制。当后者设置为高于 65536 的值时,必须相应地调整 ERL_MAX_PORT

默认: 65536

ERL_EPMD_ADDRESS

节点间和 CLI 工具通信的组件 epmd 使用的接口。

默认:所有可用接口,包括 IPv6 和 IPv4。

ERL_EPMD_PORT

节点间和 CLI 工具通信的组件 epmd 使用的端口。

默认4369

RABBITMQ_DISTRIBUTION_BUFFER_SIZE

用于节点间通信连接的 出站数据缓冲区大小限制(以 KB 为单位)。不建议使用低于 64 MB 的值。

默认: 128000

RABBITMQ_NODENAME

节点名称在每个 Erlang 节点和机器组合上都应是唯一的。要运行多个节点,请参阅 群集指南

默认:

  • Unix:* rabbit@$HOSTNAME

  • Windows: rabbit@%COMPUTERNAME%

RABBITMQ_CONFIG_FILE

主 RabbitMQ 配置文件路径,例如,新样式配置文件格式的文件为 /etc/rabbitmq/rabbitmq.conf/data/configuration/rabbitmq.conf。如果使用经典配置文件格式,则扩展名必须是 .config

默认:

  • 通用 UNIX$RABBITMQ_HOME/etc/rabbitmq/rabbitmq.conf

  • Debian/etc/rabbitmq/rabbitmq.conf
  • RPM/etc/rabbitmq/rabbitmq.conf
  • MacOS(Homebrew)${install_prefix}/etc/rabbitmq/rabbitmq.conf,Homebrew 前缀通常是 /usr/local/opt/homebrew

  • Windows%APPDATA%\RabbitMQ\rabbitmq.conf
RABBITMQ_CONFIG_FILES

指向新样式(.conf)格式的 RabbitMQ 配置文件目录的路径。文件将按字母顺序加载。在每个文件前面加上数字前缀是一种常见做法。

默认:

  • 通用 UNIX$RABBITMQ_HOME/etc/rabbitmq/conf.d

  • Debian/etc/rabbitmq/conf.d
  • RPM/etc/rabbitmq/conf.d
  • MacOS(Homebrew)${install_prefix}/etc/rabbitmq/conf.d,Homebrew 前缀通常是 /usr/local/opt/homebrew

  • Windows%APPDATA%\RabbitMQ\conf.d
RABBITMQ_ADVANCED_CONFIG_FILE

“高级”(基于 Erlang 术语)RabbitMQ 配置文件路径,扩展名为 .config。例如,/data/rabbitmq/advanced.config

默认:

  • 通用 UNIX$RABBITMQ_HOME/etc/rabbitmq/advanced.config

  • Debian/etc/rabbitmq/advanced.config
  • RPM/etc/rabbitmq/advanced.config
  • MacOS (Homebrew)${install_prefix}/etc/rabbitmq/advanced.config,Homebrew 前缀通常是 /usr/local/opt/homebrew

  • Windows%APPDATA%\RabbitMQ\advanced.config
RABBITMQ_CONF_ENV_FILE

包含环境变量定义的文件位置(不带 RABBITMQ_ 前缀)。请注意,Windows 上的文件名与其他操作系统不同。

默认:

  • 通用 UNIX 包$RABBITMQ_HOME/etc/rabbitmq/rabbitmq-env.conf
  • Ubuntu 和 Debian/etc/rabbitmq/rabbitmq-env.conf
  • RPM/etc/rabbitmq/rabbitmq-env.conf
  • MacOS (Homebrew)${install_prefix}/etc/rabbitmq/rabbitmq-env.conf,Homebrew 前缀通常是 /usr/local/opt/homebrew

  • Windows%APPDATA%\RabbitMQ\rabbitmq-env-conf.bat
RABBITMQ_LOG_BASE

可用于覆盖日志文件目录位置。

默认:

  • 通用 UNIX 包$RABBITMQ_HOME/var/log/rabbitmq
  • Ubuntu 和 Debian 包:/var/log/rabbitmq
  • RPM/var/log/rabbitmq
  • MacOS (Homebrew)${install_prefix}/var/log/rabbitmq,Homebrew 前缀通常是 /usr/local/opt/homebrew

  • Windows%APPDATA%\RabbitMQ\log
RABBITMQ_MNESIA_BASE

此基目录包含 RabbitMQ 服务器节点数据库、消息存储和群集状态文件的子目录,每个节点一个,除非显式设置了 RABBITMQ_MNESIA_DIR。重要的是,有效的 RabbitMQ 用户在此目录中拥有随时读取、写入和创建文件和子目录的足够权限。此变量通常不被覆盖。通常会覆盖 RABBITMQ_MNESIA_DIR

默认:

  • 通用 UNIX 包$RABBITMQ_HOME/var/lib/rabbitmq/mnesia
  • Ubuntu 和 Debian 包:/var/lib/rabbitmq/mnesia/
  • RPM/var/lib/rabbitmq/plugins
  • MacOS (Homebrew)${install_prefix}/var/lib/rabbitmq/mnesia,Homebrew 前缀通常是 /usr/local/opt/homebrew

  • Windows%APPDATA%\RabbitMQ
RABBITMQ_MNESIA_DIR

存储此 RabbitMQ 节点数据的目录。这包括架构数据库、消息存储、群集成员信息和其他持久性节点状态。

默认:

  • 通用 UNIX 包$RABBITMQ_MNESIA_BASE/$RABBITMQ_NODENAME
  • Ubuntu 和 Debian 包:$RABBITMQ_MNESIA_BASE/$RABBITMQ_NODENAME
  • RPM$RABBITMQ_MNESIA_BASE/$RABBITMQ_NODENAME
  • MacOS (Homebrew)${install_prefix}/var/lib/rabbitmq/mnesia/$RABBITMQ_NODENAME,Homebrew 前缀通常是 /usr/local/opt/homebrew

  • Windows%APPDATA%\RabbitMQ\$RABBITMQ_NODENAME
RABBITMQ_PLUGINS_DIR

查找和解压 插件 存档文件的目录列表。这是一个类似 PATH 的变量,不同的路径由特定于操作系统的分隔符(UNIX 上为 :,Windows 上为 ;)分隔。插件可以安装到此处列出的任何目录中。不得包含 路径限制部分 中提到的任何字符。请参阅 CLI 工具指南 了解更改此变量对 rabbitmq-plugins 的影响。

默认:

  • 通用 UNIX 包$RABBITMQ_HOME/plugins
  • Ubuntu 和 Debian 包:/var/lib/rabbitmq/plugins
  • RPM/var/lib/rabbitmq/plugins
  • MacOS (Homebrew)${install_prefix}/Cellar/rabbitmq/${version}/plugins,Homebrew 前缀通常是 /usr/local/opt/homebrew

  • Windows%RABBITMQ_HOME%\plugins
RABBITMQ_PLUGINS_EXPAND_DIR

节点解压(解包)插件 并将其用作代码路径位置的目录。不得包含 路径限制部分 中提到的任何字符。

默认:

  • 通用 UNIX 包$RABBITMQ_MNESIA_BASE/$RABBITMQ_NODENAME-plugins-expand
  • Ubuntu 和 Debian 包:$RABBITMQ_MNESIA_BASE/$RABBITMQ_NODENAME-plugins-expand
  • RPM$RABBITMQ_MNESIA_BASE/$RABBITMQ_NODENAME-plugins-expand
  • MacOS (Homebrew)${install_prefix}/var/lib/rabbitmq/mnesia/$RABBITMQ_NODENAME-plugins-expand

  • Windows%APPDATA%\RabbitMQ\$RABBITMQ_NODENAME-plugins-expand
RABBITMQ_USE_LONGNAME

设置为 true 时,RabbitMQ 将使用完全限定名称来标识节点。这在环境中可能很有用,这些环境使用完全限定域名或使用 IP 地址作为主机名或节点名称的一部分。请注意,无法将节点从短名称切换到长名称而不重置它。

默认false

RABBITMQ_SERVICENAME

已安装的 Windows 服务的名称。这会显示在 services.msc 中。

默认:RabbitMQ。

RABBITMQ_CONSOLE_LOG

将此变量设置为 newreuse,以将控制台输出从服务器重定向到默认 RABBITMQ_BASE 目录下的名为 %RABBITMQ_SERVICENAME% 的文件。

  • 如果未设置,服务器的控制台输出将被丢弃(默认)。
  • new:每次服务启动时都会创建一个新文件。
  • reuse:每次服务启动时都会覆盖该文件。

默认:(无)

RABBITMQ_SERVER_CODE_PATH

启动运行时时要指定的额外代码路径(目录)。启动节点时将传递给 erl 命令。

默认:(无)

RABBITMQ_CTL_ERL_ARGS

调用 rabbitmqctl 时使用的 erl 命令的参数。这可以设置为指定用于 Erlang 分布的端口范围
-kernel inet_dist_listen_min 35672
-kernel inet_dist_listen_max 35680

默认:(无)

RABBITMQ_SERVER_ERL_ARGS

调用 RabbitMQ 服务器时使用的 erl 命令的标准参数。这仅应在调试目的下覆盖。

危险

设置此变量将替换 RabbitMQ 提供的默认值。

提示

考虑使用 RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS 来添加或覆盖单个设置。

默认:

  • UNIX+P 1048576 +t 5000000 +stbt db +zdbbl 128000

  • Windows:(无)
RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS

调用 RabbitMQ 服务器时使用的 erl 命令的附加参数。此变量的值将追加到默认参数列表(RABBITMQ_SERVER_ERL_ARGS)。

默认:

  • Unix:(无)
  • Windows:(无)
RABBITMQ_SERVER_START_ARGS

调用 RabbitMQ 服务器时使用的 erl 命令的额外参数。这不会覆盖 RABBITMQ_SERVER_ERL_ARGS

默认:(无)

RABBITMQ_DEFAULT_USER

此环境变量仅用于开发和 CI 环境。它的含义与 rabbitmq.conf 中的 default_user 相同,但优先级更高。在无法提供配置文件,并且环境变量是设置用户的唯一方法的情况下,此选项可能更方便。

默认:(无)

RABBITMQ_DEFAULT_PASS

此环境变量仅用于开发和 CI 环境。它的含义与 rabbitmq.conf 中的 default_pass 相同,但优先级更高。在无法提供配置文件,并且环境变量是设置用户的唯一方法的情况下,此选项可能更方便。

默认:(无)

RABBITMQ_DEFAULT_VHOST

此环境变量仅用于开发和 CI 环境。它的含义与 rabbitmq.conf 中的 default_vhost 相同,但优先级更高。在无法提供配置文件,并且环境变量是设置用户和虚拟主机的唯一方法的情况下,此选项可能更方便。

默认:(无)

RABBITMQ_MAX_OPEN_FILES
重要

此变量不是配置 最大打开文件句柄限制 的主要方法。

如果设置,启动脚本将设置 RabbitMQ 可用的文件描述符限制(它们将使用提供的值执行 ulimit -n)。如果软限制设置得太低,但硬限制较高,这可能会很有用。

如果 ulimit 失败(最可能是因为该值超过了硬限制),RabbitMQ 将不会启动。

默认:(无)

除了上面列出的变量之外,还有几个环境变量告诉 RabbitMQ 在哪里查找其数据库、日志文件、插件、配置文件等

最后,一些环境变量是特定于操作系统的。

名称描述
HOSTNAME

当前机器的名称。

默认:

  • Unix、Linux:env hostname
  • MacOS:env hostname -s
COMPUTERNAME

当前机器的名称。

默认:

  • Windows:localhost
ERLANG_SERVICE_MANAGER_PATH

此路径是 erlsrv.exe(Erlang 服务包装脚本)的位置。

默认:

  • Windows 服务:%ERLANG_HOME%\erts-<var>x.x.x</var>\bin

操作系统内核限制

大多数操作系统对内核资源强制执行限制:虚拟内存、堆栈大小、打开的文件句柄等。对于 Linux 用户,这些限制可以称为“ulimit 限制”。

RabbitMQ 节点最常受到最大 打开文件句柄限制 的影响。大多数 Linux 发行版的默认值通常是 1024,这对于消息代理(或一般任何数据服务)来说非常低。有关建议值,请参阅 部署指南

修改限制

使用 systemd(现代 Linux 发行版)

在使用 systemd 的发行版上,操作系统限制通过 /etc/systemd/system/rabbitmq-server.service.d/limits.conf 的配置文件进行控制。例如,要将最大打开文件句柄限制(nofile)设置为 64000

[Service]
LimitNOFILE=64000

有关支持的限制和其他指令的信息,请参阅systemd 文档

使用 Docker

要为 Docker 容器配置内核限制,请在 Docker 守护进程配置文件 中使用 "default-ulimits" 键。该文件必须安装在 Docker 主机上的 /etc/docker/daemon.json

{
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 64000,
"Soft": 64000
}
}
}

未使用 systemd(旧版 Linux 发行版)

在不使用 systemd 的发行版上调整 RabbitMQ 每个用户限制的最直接方法是编辑 /etc/default/rabbitmq-server(由 RabbitMQ Debian 包提供)或 rabbitmq-env.conf,以便在服务启动前调用 ulimit

ulimit -S -n 4096

限制不能高于限制(在许多发行版中默认为 4096)。可以通过 /etc/security/limits.conf 增加硬限制。这还需要启用 pam_limits.so 模块并重新登录或重启。

请注意,无法更改正在运行的 OS 进程的限制。

© . This site is unofficial and not affiliated with VMware.