RabbitMQ带有默认的内置设置。在某些环境(例如开发和质量检查)中,这些可能就足够了。对于所有其他情况以及​​生产部署调整​​​,有一种方法可以在代理和​​插件中​​配置很多东西。

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

和更多。

由于配置会影响系统的许多区域,包括插件,因此各个​​文档指南会​​​ 更深入地介绍可配置的内容。​​运行时调优​​​是本指南的附带内容,它侧重于运行时中的可配置参数。​​生产清单​​是相关的指南,概述了在大多数生产环境中可能需要调整哪些设置。

​配置方式​

可以使用负责不同区域的多种机制来配置RabbitMQ节点:

配置方式RabbitMQ

机制

描述

​配置文件​

包含以下服务器和插件设置


等等。

​环境变量​

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

​兔子​

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

​RabbitMQ队列​

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

​Rabbitmq插件​

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

​RabbitMQ诊断​

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

​参数与政策​

定义了可以在运行时更改的群集范围的设置,以及可以方便地为队列组(交换等)配置的设置,例如包括可选的队列参数。

​运行时(Erlang VM)标志​

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

​操作系统内核限制​

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

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

​配置文件​

​介绍​

虽然RabbitMQ中的某些设置可以使用环境变量进行调整,但大多数设置是使用​​主配置文件​​​(通常名为Rabbitmq.conf)进行​​配置的​​。这包括核心服务器和插件的配置。可以使用其他配置文件来配置无法以主文件的配置格式表示的设置。这将在下面更详细地介绍。

下面的部分介绍了这两个文件的语法和​​位置​​,在何处可以找到示例等。

​配置文件位置​

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

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

如果对操作系统和安装方法的RabbitMQ配置文件位置有疑问,请按照以下部分中的说明查阅日志文件和/或管理UI。

​验证配置:如何查找配置文件位置​

可以通过检查RabbitMQ日志文件来验证活动的配置文件。它将 与其他代理启动日志条目一起显示在顶部的​​日志文件​​中。例如:

节点:rabbit @ example
主目录:/ var / lib / rabbitmq
配置文件:/etc/rabbitmq/advanced.config
:/etc/rabbitmq/rabbitmq.conf

如果RabbitMQ无法找到或读取配置文件,则日志条目将显示为:

节点:rabbit @ example
主目录:/ var / lib / rabbitmq
配置文件:/var/lib/rabbitmq/hare.conf(未找到)

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

对配置设置进行故障排除时,在检查有效的节点配置之前,验证配置文件路径正确,存在并且可以加载(例如文件可读)非常有用。

​验证配置:如何检查有效配置​

可以使用​​rabbitmqctl环境​​命令打印有效的配置(用户提供的值合并为默认值)。它将为节点上运行的每个应用程序(RabbitMQ,插件,库)打印应用的配置。

有效配置应与配置文件位置一起验证(请参见上文)。这是解决各种问题的有用步骤。

​新旧配置文件格式​

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

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

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

配置文件

使用格式

目的

rabbitmq.conf

新样式格式(sysctl或类似ini的格式)

​主配置文件​​。应该用于大多数设置。对于人类来说,阅读和机器(部署工具)的生成更容易。并非所有设置都可以这种格式表示。

advanced.config

经典(Erlang术语)

不能以新样式配置格式表示的有限数量的设置,例如​​LDAP查询​​。仅在必要时使用。

rabbitmq-env.conf(在Windows上为rabbitmq-env.conf.bat)

环境变量对

用于在一处设置与RabbitMQ相关的​​环境变量​​。

比较此示例rabbitmq.conf文件

#一个新的样式格式代码段。rabbitmq.conf文件使用此格式。
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 = 真

%%经典格式的代码段,现在由advanced.config文件使用。
[
{兔子,[{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服务器和插件。从RabbitMQ 3.7.0开始,格式为​​sysctl格式​​。

语法可以在3行中简要说明:

  • 一种设置用一行
  • 行结构化键=值
  • 以#字符开头的任何行都是注释

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

#这是一条注释
listeners.tcp.default = 5673

​经典配置格式中​​的相同示例:

[
{兔子, [
{tcp_listeners,[ 5673 ]}
]
}
]。

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

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

诸如​​Networking​​​,​​TLS​​​或 ​​Access Control之​​类的文档指南包含许多相关格式的示例。

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

要覆盖RabbitMQ配置文件的主要位置,请使用RABBITMQ_CONFIG_FILE  ​​环境变量​​。使用.conf作为新样式配置格式的文件扩展名,例如/etc/rabbitmq/rabbitmq.conf或 /data/configuration/rabbitmq/rabbitmq.conf

​advanced.config文件​

某些配置设置不可能或难以使用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

​视窗​

%APPDATA%\ RabbitMQ \

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

​MacOS Homebrew公式​

$ {install_prefix} / etc / rabbitmq /,而Homebrew地窖前缀通常为/ usr / local

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

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

#覆盖主要配置文件的位置
RABBITMQ_CONFIG_FILE = / path / to / a / custom / location / rabbitmq.conf

#覆盖高级配置文件位置
RABBITMQ_ADVANCED_CONFIG_FILE = / path / to / a / custom / location / advanced.config

#覆盖环境变量文件的位置
RABBITMQ_CONF_ENV_FILE = / path / to / a / custom / location / rabbitmq-env.conf

​什么时候应用配置文件更改​

重启节点后,rabbitmq.conf和advanced.config更改才会生效。

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

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

在部署自动化的上下文中,这意味着理想情况下,应在安装RabbitMQ之前设置环境变量(例如RABBITMQ_BASE和RABBITMQ_CONFIG_FILE)。这将有助于避免不必要的混乱和重新安装Windows服务。

​rabbitmq.config(经典格式)文件​

在此之前的RabbitMQ 3.7.0,RabbitMQ的配置文件被命名为 rabbitmq.config并使用​​相同的Erlang项格式​​​通过使用advanced.config今天。为了向后兼容,​​仍支持​​该格式。

经典格式已弃用。请根据需要使用Rabbitmq.conf中的​​新样式配置格式​​ ,并附上advanced.config文件。

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

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

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

经典配置格式的使用应仅限于​​advanced.config文件​​​和不能使用​​ini-style配置文件​​配置的设置。

​示例配置文件​

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

这些文件包含大多数配置键的示例以及这些设置的简要说明。在示例中,所有配置项均已注释掉,因此您可以取消注释所需的内容。请注意,示例文件仅用作示例,不应视为一般建议。

在大多数发行版中,示例文件与实际文件放置在相同的位置(请参见上文)。关于Debian和RPM发行政策,禁止这样做;而是分别在/ usr / share / doc / rabbitmq-server / 或/usr/share/doc/rabbitmq-server-3.8.5/下找到文件。

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

这些变量是最常见的。该列表不完整,因为某些设置非常模糊。

文献资料

听众

在其上侦听“普通” AMQP 0-9-1和AMQP 1.0连接(不使用​​TLS​​​)的端口或主机名/对。有关更多详细信息和示例,请参见​​网络指南​​。

默认:

listeners.tcp.default = 5672

 


num_acceptors.tcp

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

默认:

num_acceptors.tcp = 10

 


handshake_timeout

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

默认:

handshake_timeout = 10000

 


listeners.ssl

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

默认值:无(未设置)


num_acceptors.ssl

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

默认:

num_acceptors.ssl = 10

 


ssl_options

TLS配置。请参阅​​TLS指南​​。

默认:

ssl_options =无

 


ssl_handshake_timeout

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

默认:

ssl_handshake_timeout = 5000

 


vm_memory_high_watermark

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

vm_memory_high_watermark.relative = 0.6
vm_memory_high_watermark.absolute = 2 GB

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

默认:

vm_memory_high_watermark.relative = 0.4

 


vm_memory_calculation_strategy

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


  • 已分配:使用Erlang内存分配器统计信息
  • rss:使用操作系统RSS内存报告。这使用特定于操作系统的方法,并且可能会启动短暂的子进程。
  • legacy:使用传统内存报告(运行时认为要使用多少内存)。该策略是相当不准确的。
  • erlang:与legacy相同,保留为向后兼容

默认:

vm_memory_calculation_strategy =已分配

 


vm_memory_high_watermark_paging_ratio

队列开始将消息分页到磁盘以释放内存的高水位标记限制的分数。请参阅​​基于内存的流控制​​文档。

默认:

vm_memory_high_watermark_paging_ratio = 0.5

 


total_memory_available_override_value

与使用特定于操作系统的方式从环境推断内存相比,可以覆盖可用的内存总量。仅当节点可用的实际最大RAM量与节点将推断的值不匹配时(例如,由于容器化或节点无法识别的类似约束),才应使用此方法。该值可以设置为整数个字节,也可以设置为信息单位(例如“ 8GB”)。例如,当该值设置为4 GB时,该节点将认为它正在具有4 GB RAM的计算机上运行。

默认值:未定义(未设置或使用)。


disk_free_limit

RabbitMQ在其上存储数据的分区的磁盘可用空间限制。当可用磁盘空间低于此限制时,将触发流控制。可以相对于RAM总量设置该值,也可以设置为绝对值(以字节为单位),也可以设置为信息单位(例如,“ 50MB”或“ 5GB”):

disk_free_limit.relative = 3.0
disk_free_limit.absolute = 2 GB

默认情况下,可用磁盘空间必须超过50MB。请参阅​​磁盘警报​​文档。

默认:

disk_free_limit.absolute = 50 MB

 


log.file.level

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

级别可以是错误(仅记录错误),警告(仅记录错误和警告),信息(错误,警告和参考消息被记录)或调试(错误,警告,参考消息和调试消息)之一。已记录)。

默认:

log.file.level =信息

 


channel_max

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

默认:

channel_max = 2047

 


channel_operation_timeout

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

默认:

channel_operation_timeout = 15000

 


max_message_size

允许的最大消息有效负载大小(以字节为单位)。较大的消息将被拒绝,并带有适当的通道例外。

默认值:134217728

最大值:536870912


心跳

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

默认:

心跳 = 60

 


default_vhost

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

默认:

default_vhost = /

 


default_user

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

默认:

default_user =访客

 


default_pass

默认用户的密码。

默认:

default_pass =客人

 


default_user_tags

默认用户的标签。

默认:

default_user_tags.administrator = true

 


default_permissions

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

默认:

default_permissions.configure =。*
default_permissions.read =。*
default_permissions.write =。*

 


loopback_users

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

要允许默认的“ guest”用户远程连接(一种​​不适合生产使用​​的安全做法),请将其设置为“ none”:

#糟糕的安全做法,
#考虑
使用安全生成的凭据
创建一个新的用户!loopback_users =无

 

要将另一个用户限制为仅限本地主机的连接,请这样做(“ monitoring”是用户名):

loopback_users.monitoring = true

 

默认:

#guest使用众所周知的
#凭据,并且只能
#从本地主机登录
#默认情况下
loopback_users.guest = true

 


cluster_formation.classic_config.nodes

经典​​对等发现​​后端的要联系节点列表。例如,要在第一次引导时使用节点“ rabbit @ hostname1”和“ rabbit @ hostname2”进行集群:

cluster_formation.classic_config.nodes.1 =兔子@主机名1
cluster_formation.classic_config.nodes.2 =兔子@主机名2

默认值:“ none”(未设置)


collect_statistics

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


  • `none`(不发出统计事件)
  • `coarse`(发出每个队列/每个通道/每个连接的统计信息)
  • “精细”(还发出按消息统计信息)

默认:

collect_statistics =无

 


collect_statistics_interval

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

默认:

collect_statistics_interval = 5000

 


management_db_cache_multiplier

影响​​管理插件​​ 将缓存昂贵的管理查询(例如队列列表)的时间。缓存将上次查询的经过时间乘以该值,并将结果缓存此时间量。

默认:

management_db_cache_multiplier = 5

 


auth_mechanisms

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

默认:

auth_mechanisms.1 =普通
auth_mechanisms.2 = AMQPLAIN

 


auth_backends


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

通过​​插件​​可以使用除`rabbit_auth_backend_internal`外的其他数据库。

默认:

auth_backends.1 =内部

 


reverse_dns_lookups

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

默认:

reverse_dns_lookups = 假

 


proxy_count

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

默认:

proxy_count = 16

 


tcp_listen_options

默认套接字选项。您可能不想更改此设置。

默认:

tcp_listen_options.backlog = 128 
tcp_listen_options.nodelay = 真
tcp_listen_options.linger.on = 真
tcp_listen_options.linger.timeout = 0
tcp_listen_options.exit_on_close = 假

 


hipe_compile


不使用。不再支持此选项。从Erlang 22开始删除了受支持的HiPE。

默认:

hipe_compile = 假

 


cluster_partition_handling

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


  • 忽视
  • 自愈
  • pause_minority
  • pause_if_all_down

pause_if_all_down模式需要其他参数:

  • 节点
  • 恢复

有关更多信息,请参见 ​​分区文档​​。

默认:

cluster_partition_handling =忽略

 


cluster_keepalive_interval

节点应向其他节点发送保持活动消息的频率(以毫秒为单位)。请注意,这与​​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

 


mirroring_sync_batch_size

用于将消息传输到非同步副本(队列镜像)的批处理大小。请参阅​​有关急切批处理同步的文档​​。

默认:

mirroring_sync_batch_size = 4096

 


queue_master_locator

队列主服务器定位策略。可用的策略有:


  • 最小大师
  • 客户本地
  • 随机

有关更多信息,请参阅​​有关队列主服务器位置​​​的 ​​文档​​。

默认:

queue_master_locator =本地客户端

 


proxy_protocol

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

有关更多信息,请参见​​网络指南​​。

默认:

proxy_protocol = 假

 


只能在“ 兔子”部分下的​​高级配置文件中​​设置以下配置设置。

文献资料

msg_store_index_module

队列索引的实现模块。建议您 在更改此内容之前阅读​​消息存储调整​​文档。

默认值:rabbit_msg_store_ets_index

{兔子, [
{msg_store_index_module,rabbit_msg_store_ets_index}
]}

 


backing_queue_module

队列内容的实现模块。

默认:

{兔子, [
{backing_queue_module,rabbit_variable_queue}
]}

 


msg_store_file_size_limit

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

默认值:16777216

{兔子,[
%%
使用现有(已初始化)数据库
对节点%%进行更改很危险,可能会导致%%导致数据丢失!
{msg_store_file_size_limit,16777216 }
]}

 


trace_vhosts

由​​跟踪器​​内部使用。你不应该改变这个。

默认:

{兔子, [
{trace_vhosts,[]}
]}

 


msg_store_credit_disc_bound

消息存储给予队列处理的功劳。

默认情况下,为队列进程分配4000个消息存储信用,然后为它处理的每800条消息分配800个信用。

由于内存压力而需要分页的邮件也将使用此信用。

消息存储是信用流链中的最后一个组件。​​了解信贷流量。​

仅当消息持久保存到消息存储中时,此值才生效。如果消息嵌入在队列索引中,则修改此设置无效,因为在写入队列索引时不使用credit_flow。

默认:

{兔子, [
{msg_store_credit_disc_bound,{ 4000800 }}
]}

 


queue_index_max_journal_entries

在多少个队列索引日志条目之后,它将刷新到磁盘。

默认:

{兔子, [
{queue_index_max_journal_entries,32768 }
]}

 


lazy_queue_explicit_gc_run_operation_threshold

仅在内存不足时才可用于懒惰队列的可调值。这是触发垃圾收集器和其他内存减少活动的阈值。较低的值可能会降低性能,而较高的值可以提高性能,但会导致更高的内存消耗。您几乎可以肯定不应该更改此设置。

默认:

{兔子,[
{lazy_queue_explicit_gc_run_operation_threshold,1000}
]
}

 


queue_explicit_gc_run_operation_threshold

仅在内存不足时可用于普通队列的可调值。这是触发垃圾收集器和其他内存减少活动的阈值。较低的值可能会降低性能,而较高的值可以提高性能,但会导致更高的内存消耗。您几乎可以肯定不应该更改此设置。

默认:

{兔子,[
{queue_explicit_gc_run_operation_threshold,1000}
]
}

 


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

​配置值加密​

敏感的配置条目(例如密码,包含凭据的URL)可以在RabbitMQ配置文件中进行加密。代理在启动时解密加密的条目。

请注意,加密的配置条目不会使系统真正更安全。但是,它们允许RabbitMQ的部署符合各个国家/地区的法规,要求配置文件中的纯文本中不得显示任何敏感数据。

加密值必须位于Erlang 加密 元组内:{encrypted,...}。这是默认用户的带有加密密码的配置文件示例:

[
{兔子, [
{default_user,<< “ guest” >>},
{default_pass,
{已加密,
<< “ cPAymwqmMnbPXXRVqVzpxJdrS8mHEKuo2V + 3vt1u / fymexD9oztQ2G / oJ4PAaSb2c5N / hRJ2aqP / X0VAfx8xOQ ==” >>
}
},
{config_entry_decoder,[
{passphrase,<< “ mypassphrase” >>}
]}
]}
]。

请注意config_entry_decoder密钥和RabbitMQ将用来解密加密值的密码。

密码不必在配置文件中进行硬编码,它可以在单独的文件中:

[
{兔子, [
%% ...
{config_entry_decoder,[
{passphrase,{file,“ / path / to / passphrase / file” }}
]}
]}
]。

RabbitMQ还可以通过使用{passphrase,提示符}来要求操作员在输入密码时输入密码。

使用​​rabbitmqctl​​和encode 命令加密值:

rabbitmqctl编码'<<“ guest” >>' mypassphrase
{encrypted,<< “ ...长加密值...” >>}
rabbitmqctl编码' “AMQP://弗雷德:secret@host1.domain/my_vhost”' mypassphrase
{encrypted,<< “ ...长加密值...” >>}

或者,在Windows上:

rabbitmqctl编码“ <<” “来宾” “ >>” mypassphrase
{encrypted,<< “ ...长加密值...” >>}
rabbitmqctl编码' “AMQP://弗雷德:secret@host1.domain/my_vhost”' mypassphrase
{encrypted,<< “ ...长加密值...” >>}

如果要解密值,请添加解码命令:

rabbitmqctl解码'{encrypted,<<“ ...” >>}' mypassphrase
<< “客人” >>
rabbitmqctl解码'{encrypted,<<“ ...” >>}' mypassphrase
“ amqp:// fred:secret@host1.domain/my_vhost”

或者,在Windows上:

rabbitmqctl解码“ {encrypted,<<” “ ...” “ >>}” mypassphrase
<< “客人” >>
rabbitmqctl解码“ {encrypted,<<“ ” ...“ ” >>}“ mypassphrase
” amqp:// fred:secret@host1.domain/my_vhost“

可以对不同类型的值进行编码。上面的示例对二进制文件(<<“ guest” >>)和字符串(“ amqp:// fred:secret@host1.domain/my_vhost”)进行编码。

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

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

[
{兔子, [
...
{config_entry_decoder,[
{passphrase,“ mypassphrase” },
{cipher,blowfish_cfb64},
{hash,sha256},
{次,10000 }
]}
]}
]。

或使用​​CLI工具​​:

rabbitmqctl编码--cipher blowfish_cfb64- 哈希 sha256-迭代10000 \
'<<“ guest” >>' mypassphrase

或者,在Windows上:

rabbitmqctl编码--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:

#示例Rabbitmq-env.conf文件条目。请注意,变量
#没有RABBITMQ_前缀。

#覆盖节点名称
NODENAME =兔子@myhost

#指定新样式的配置文件位置
CONFIG_FILE = / etc / rabbitmq / rabbitmq.conf

#指定高级配置文件位置
ADVANCED_CONFIG_FILE = / etc / rabbitmq / advanced.config

有关详细信息,请参见​​rabbitmq-env.conf手册页​​。

​视窗​

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

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

如果配置文件位置或`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或其数据目录)
  • 通过命令行设置环境变量,即运行如下命令:
设置 RABBITMQ_BASE = C:\ Data \ RabbitMQ
  • 运行rabbitmq-service.bat安装
  • 运行rabbitmq-service.bat开始

这将以使环境变量和rabbitmq-env-conf.bat更改可观察到的方式重启节点 。

​RabbitMQ使用的环境变量​

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

在shell环境中设置的环境变量优先于​​Rabbitmq-env.conf​​​或 ​​Rabbitmq-env-conf.bat​​​中设置​​的变量​​,后者依次覆盖RabbitMQ内置的默认设置。

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

名称

描述

RABBITMQ_NODE_IP_ADDRESS

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

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


RABBITMQ_NODE_PORT

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

默认值:5672。


RABBITMQ_DIST_PORT

用于节点间和CLI工具通信的端口。忽略节点配置文件是否设置了kernel.inet_dist_listen_min或kernel.inet_dist_listen_max密钥。有关详细信息,请参见​​网络​​。

默认值:RABBITMQ_NODE_PORT + 20000


ERL_EPMD_ADDRESS

​epmd​​​ 使用的​​接口​​,它是节点间和CLI工具通信中的组件。

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


ERL_EPMD_PORT

​epmd​​​ 使用的​​端口​​,它是节点间和CLI工具通信中的组件。

默认值:4369


RABBITMQ_DISTRIBUTION_BUFFER_SIZE

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

默认值:128000


RABBITMQ_IO_THREAD_POOL_SIZE

​运行时用于I / O的线程数​​。不建议使用低于32的值。

默认值:128(Linux),64(Windows)


RABBITMQ_NODENAME

每个Erlang-node-and-machine组合的节点名称应该唯一。要运行多个节点,请参阅​​集群指南​​。

默认值

  • 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
  • Debian的:/ etc / rabbitmq / rabbitmq
  • RPM:/ etc / rabbitmq / rabbitmq
  • MacOS(Homebrew):$ {install_prefix} / etc / rabbitmq / rabbitmq,Homebrew前缀通常为/ usr / local
  • Windows:%APPDATA%\ RabbitMQ \ rabbitmq

 


RABBITMQ_ADVANCED_CONFIG_FILE

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

默认值

  • 通用UNIX:$ RABBITMQ_HOME / etc / rabbitmq / advanced
  • Debian:/ etc / rabbitmq / advanced
  • RPM:/ etc / rabbitmq / advanced
  • MacOS(Homebrew):$ {install_prefix} / etc / rabbitmq / advanced,Homebrew前缀通常为/ usr / local
  • Windows:%APPDATA%\ RabbitMQ \高级

 


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
  • Windows:%APPDATA%\ RabbitMQ \ rabbitmq-env-conf.bat

 


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
  • 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
  • Windows:%APPDATA%\ RabbitMQ \ $ RABBITMQ_NODENAME

 


RABBITMQ_PLUGINS_DIR

​插件​​​档案文件 所在的目录列表。这是类似PATH的变量,其中不同的路径由OS特定的分隔符分隔(::对于Unix ,;对于Windows)。插件可以​​安装​​​到此处列出的任何目录中。不得包含​​路径限制部分中​​提到的任何字符。

默认值

  • 通用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
  • 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-插件-扩大
  • MacOS(自制软件): $ {install_prefix} / var / lib / rabbitmq / mnesia / $ RABBITMQ_NODENAME-plugins-expand
  • Windows:%APPDATA%\ RabbitMQ \ $ RABBITMQ_NODENAME-plugins-expand

 


RABBITMQ_USE_LONGNAME

设置为true时,这将导致RabbitMQ使用完全限定的名称来标识节点。在使用完全限定域名的环境中,这可能会很有用。请注意,在不重置节点的情况下,不可能在使用短名称和长名称之间进行切换。

默认值:false


RABBITMQ_SERVICENAME

已安装的Windows服务的名称。这将出现在 services.msc中。

默认值:RabbitMQ。


RABBITMQ_CONSOLE_LOG

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


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

默认值:(无)


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命令的标准参数。应该仅出于调试目的而将其覆盖。覆盖此变量 将替换默认值。

默认值

  • 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 ​​在哪里找到其数据库,日志文件,插件,配置等​​。

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

名称

描述

主机名

当前机器的名称。

默认值

  • Unix,Linux:env主机名
  • MacOS:env主机名-s

 


电脑名称

当前机器的名称。

默认值

  • Windows:本地主机

 


ERLANG_SERVICE_MANAGER_PATH

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

默认值

  • Windows服务:%ERLANG_HOME%\ erts- xxx \ bin

 


​操作系统内核限制​

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

RabbitMQ节点通常受最大​​打开文件句柄限制的影响​​​。大多数Linux发行版的默认限制值通常为1024,这对于消息传递代理(或通常为任何数据服务)而言非常低。有关建议值,请参见​​生产清单​​。

修改限制

使用systemd(现代Linux发行版)

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

[服务]
限制NOFILE = 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​​模块并重新登录或重新引导。