跳至主内容
版本:4.3

配置

概述

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

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

等等。

由于配置会影响系统的许多领域(包括插件),单独的文档指南会更深入地探讨可配置内容。运行时调优是本指南的配套内容,专注于运行时可配置的参数。部署指南是一份相关文档,概述了在大多数生产环境中可能需要调优的设置。

配置方式

RabbitMQ 节点可以使用多种机制进行配置,这些机制分别负责不同的领域

配置 RabbitMQ 的方式
机制描述

配置文件

包含 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主配置文件进行配置的。

这包括核心服务器以及插件的配置。可以使用额外的配置文件来配置主文件的配置格式无法表示的设置。下文将详细介绍。

以下部分涵盖了这两个文件的语法和位置、在哪里查找示例等内容。

配置文件位置

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

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

如果不确定 RabbitMQ 配置文件所在的位置,请查阅日志文件和/或管理 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.example示例 rabbitmq.conf 文件。它包含了您可能需要设置的大多数配置项(省略了一些非常晦涩的项)示例,以及这些设置的文档。

诸如网络TLS访问控制之类的文档指南以相关格式包含许多示例。

请注意,不要将此配置文件与环境变量配置文件 rabbitmq-env.confrabbitmq-env-conf.bat 混淆。

要覆盖主 RabbitMQ 配置文件位置,请使用 RABBITMQ_CONFIG_FILE(或 RABBITMQ_CONFIG_FILES 以使用已排序文件的 conf.d 样式目录)环境变量。使用 .conf 作为新样式配置格式的文件扩展名,例如 /etc/rabbitmq/rabbitmq.conf/data/configuration/rabbitmq/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.example示例 advanced.config 文件。它专注于通常使用高级配置设置的选项。

要覆盖高级配置文件位置,请使用 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 公式

${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

重要

如果配置文件位置或 rabbitmq-env-conf.bat 中的任何值发生更改,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.3.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 握手(socket 连接和 TLS 握手之后)的最长等待时间,以毫秒为单位。

默认

handshake_timeout = 10000
ssl_handshake_timeout

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

默认

ssl_handshake_timeout = 5000
vm_memory_high_watermark

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

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 内存报告。这使用特定于 OS 的方法,并可能启动短寿命的子进程。
  • legacy:使用旧版内存报告(运行时认为使用了多少内存)。此策略相当不准确。
  • erlang:与 legacy 相同,保留以实现向后兼容

默认

vm_memory_calculation_strategy = rss
total_memory_available_override_value

可以覆盖可用内存总量,而不是通过特定于 OS 的方法从环境中推断它。仅当节点实际可用的最大 RAM 量与节点将推断出的值不匹配时(例如,由于容器化或节点无法感知的类似约束),才应使用此值。该值可以设置为字节整数,或者以信息单位(例如 8GB)设置。例如,当值设置为 4GB 时,节点将认为它运行在拥有 4GB 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

默认 socket 选项。当您排查网络问题时,可能需要更改这些选项。

默认

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 socket。请注意,这不能保证内核立即释放 TCP socket 资源。


tcp_listen_options.keepalive = false

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


cluster_partition_handling

从 RabbitMQ 4.3.0 开始不再生效。

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

默认

cluster_partition_handling = ignore
cluster_keepalive_interval

节点向其他节点发送存活消息的频率(以毫秒为单位)。请注意,这与 net_ticktime 不同;错过的存活消息不会导致节点被视为宕机。

默认

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 连接时首先发送 proxy protocol 标头。这意味着要在 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

追踪器内部使用。您不应该更改此设置。

默认

{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_valuerabbitmq.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 encodeadvanced.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_FILERABBITMQ_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 手册页

Windows

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

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

重要

如果配置文件位置或 rabbitmq-env-conf.bat 中的任何值发生更改,Windows 服务用户将需要**重新安装服务**。

在服务安装时,以下变量通过 erlsrv set -env 解析并嵌入到服务配置中

  • APPDATA
  • ERL_LIBS
  • ERL_MAX_ETS_TABLES
  • ERL_MAX_PORTS
  • RABBITMQ_BASE
  • RABBITMQ_CONFIG_FILE
  • RABBITMQ_LOG_BASE
  • RABBITMQ_MNESIA_BASE
  • RABBITMQ_NODENAME

要使其他环境变量可供 Windows 服务使用,请将它们定义为系统范围的环境变量。

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

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

  • 启动一个 管理命令提示符
  • 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 工具通信的端口。如果 rabbitmq.conf 设置了 distribution.listener.port_range.mindistribution.listener.port_range.max,则忽略此项。有关详细信息,请参阅网络,有关 Windows 特定详细信息,请参阅 Windows 配置

默认RABBITMQ_NODE_PORT + 20000

ERL_MAX_PORTS

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

默认: 65536

ERL_EPMD_ADDRESS

epmd(节点间和 CLI 工具通信中的一个组件)使用的接口。

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

ERL_EPMD_PORT

epmd(节点间和 CLI 工具通信中的一个组件)使用的端口。

默认4369

RABBITMQ_DISTRIBUTION_BUFFER_SIZE

用于节点间通信连接的传出数据缓冲区大小限制(以千字节为单位)。不建议使用小于 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 样式的变量,其中不同的路径由 OS 特定的分隔符(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 模块并重新登录或重启系统。

请注意,无法更改正在运行的操作系统进程的限制。

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