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服务器和插件。从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
某些配置设置不可能或难以使用sysctl格式进行配置。因此,可以使用Erlang术语格式的另一个配置文件(与rabbitmq.config相同)。该文件通常命名为advanced.config。它将与Rabbitmq.conf中提供的配置合并。
RabbitMQ服务器源存储库包含一个 名为advanced.config.example 的示例advanced.config文件。它着重于通常使用高级配置设置的选项。
要覆盖高级配置文件的位置,请使用RABBITMQ_ADVANCED_CONFIG_FILE 环境变量。
默认配置文件位置是特定于发行版的。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 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/下找到文件。
这些变量是最常见的。该列表不完整,因为某些设置非常模糊。
键 | 文献资料 |
---|---|
听众 | 在其上侦听“普通” AMQP 0-9-1和AMQP 1.0连接(不使用TLS)的端口或主机名/对。有关更多详细信息和示例,请参见网络指南。 默认:
|
num_acceptors.tcp | 接受TCP侦听器连接的Erlang进程数。 默认:
|
handshake_timeout | AMQP 0-9-1握手(套接字连接和TLS握手后)的最长时间(以毫秒为单位)。 默认:
|
listeners.ssl | 侦听启用了TLS的AMQP 0-9-1和AMQP 1.0连接的端口或主机名/对。有关更多详细信息和示例,请参见TLS指南。 默认值:无(未设置) |
num_acceptors.ssl | 接受来自客户端的TLS连接的Erlang进程数。 默认:
|
ssl_options | TLS配置。请参阅TLS指南。 默认:
|
ssl_handshake_timeout | TLS握手超时,以毫秒为单位。 默认:
|
vm_memory_high_watermark | 触发流量控制的内存阈值。可以是绝对值,也可以相对于操作系统可用的RAM量: 请参阅基于内存的流控制和警报 文档。 默认:
|
vm_memory_calculation_strategy | 内存使用情况报告的策略。可以是以下之一:
默认:
|
vm_memory_high_watermark_paging_ratio | 队列开始将消息分页到磁盘以释放内存的高水位标记限制的分数。请参阅基于内存的流控制文档。 默认:
|
total_memory_available_override_value | 与使用特定于操作系统的方式从环境推断内存相比,可以覆盖可用的内存总量。仅当节点可用的实际最大RAM量与节点将推断的值不匹配时(例如,由于容器化或节点无法识别的类似约束),才应使用此方法。该值可以设置为整数个字节,也可以设置为信息单位(例如“ 8GB”)。例如,当该值设置为4 GB时,该节点将认为它正在具有4 GB RAM的计算机上运行。 默认值:未定义(未设置或使用)。 |
disk_free_limit | RabbitMQ在其上存储数据的分区的磁盘可用空间限制。当可用磁盘空间低于此限制时,将触发流控制。可以相对于RAM总量设置该值,也可以设置为绝对值(以字节为单位),也可以设置为信息单位(例如,“ 50MB”或“ 5GB”): 默认情况下,可用磁盘空间必须超过50MB。请参阅磁盘警报文档。 默认:
|
log.file.level | 控制日志记录的粒度。该值是日志事件类别和日志级别对的列表。 级别可以是错误(仅记录错误),警告(仅记录错误和警告),信息(错误,警告和参考消息被记录)或调试(错误,警告,参考消息和调试消息)之一。已记录)。 默认:
|
channel_max | 与客户端协商的最大允许通道数,不包括协议中使用的特殊通道号0。设置为0表示“无限制”,这是一个危险值,因为应用程序有时会出现通道泄漏。使用更多通道会增加代理的内存占用量。 默认:
|
channel_operation_timeout | 通道操作超时(以毫秒为单位)(内部使用,由于消息协议的差异和限制,因此不直接暴露给客户端)。 默认:
|
max_message_size | 允许的最大消息有效负载大小(以字节为单位)。较大的消息将被拒绝,并带有适当的通道例外。 默认值:134217728 最大值:536870912 |
心跳 | 表示服务器在连接参数协商期间建议的心跳超时的值。如果两端都设置为0,则禁用心跳(不建议这样做)。有关详细信息,请参见心跳指南。 默认:
|
default_vhost | RabbitMQ从头开始创建新数据库时要创建的虚拟主机。交换“ amq.rabbitmq.log”将存在于该虚拟主机中。 默认:
|
default_user | RabbitMQ从头开始创建新数据库时要创建的用户名。 默认:
|
default_pass | 默认用户的密码。 默认:
|
default_user_tags | 默认用户的标签。 默认:
|
default_permissions | 创建默认用户时分配给它的权限。 默认:
|
loopback_users | 仅允许通过环回接口(即“ localhost”)连接到代理的用户列表。 要允许默认的“ guest”用户远程连接(一种不适合生产使用的安全做法),请将其设置为“ none”:
要将另一个用户限制为仅限本地主机的连接,请这样做(“ monitoring”是用户名):
默认:
|
cluster_formation.classic_config.nodes | 经典对等发现后端的要联系节点列表。例如,要在第一次引导时使用节点“ rabbit @ hostname1”和“ rabbit @ hostname2”进行集群: 默认值:“ none”(未设置) |
collect_statistics | 统计信息收集方式。主要与管理插件相关。选项有:
默认:
|
collect_statistics_interval | 统计信息的收集间隔(以毫秒为单位)。主要与管理插件相关。 默认:
|
management_db_cache_multiplier | 影响管理插件 将缓存昂贵的管理查询(例如队列列表)的时间。缓存将上次查询的经过时间乘以该值,并将结果缓存此时间量。 默认:
|
auth_mechanisms | 提供给客户端的SASL身份验证机制。 默认:
|
auth_backends | 要使用 的身份验证和授权后端列表。有关详细信息和示例,请参见访问控制指南。 通过插件可以使用除`rabbit_auth_backend_internal`外的其他数据库。 默认:
|
reverse_dns_lookups | 设置为true可使RabbitMQ对客户端连接执行反向DNS查找,并通过rabbitmqctl和管理插件显示该信息。 默认:
|
proxy_count | 用于集群内部通信的委托进程数。在具有大量核心并且也是群集一部分的计算机上,您可能希望增加该值。 默认:
|
tcp_listen_options | 默认套接字选项。您可能不想更改此设置。 默认:
|
hipe_compile | 不使用。不再支持此选项。从Erlang 22开始删除了受支持的HiPE。 默认:
|
cluster_partition_handling | 如何处理网络分区。可用的模式有:
默认:
|
cluster_keepalive_interval | 节点应向其他节点发送保持活动消息的频率(以毫秒为单位)。请注意,这与net_ticktime不同;错过的keepalive消息不会导致节点被认为宕机。 默认:
|
queue_index_embed_msgs_below | 消息的大小(字节),低于该大小的消息将直接嵌入队列索引中。建议您在更改之前阅读持久性调整文档。 默认:
|
mnesia_table_loading_retry_timeout | 等待群集中的Mnesia表可用时使用的超时。 默认:
|
mnesia_table_loading_retry_limit | 在集群启动中等待Mnesia表时重试。请注意,此设置不适用于Mnesia升级或节点删除。 默认:
|
mirroring_sync_batch_size | 用于将消息传输到非同步副本(队列镜像)的批处理大小。请参阅有关急切批处理同步的文档。 默认:
|
queue_master_locator | 队列主服务器定位策略。可用的策略有:
默认:
|
proxy_protocol | 如果设置为true,则在打开AMQP连接时,RabbitMQ将期望首先发送代理协议标头。这意味着在RabbitMQ的前面设置一个符合代理协议的反向代理(例如HAproxy 或AWS ELB)。启用代理协议后,客户端无法直接连接到RabbitMQ,因此所有连接都必须通过反向代理。 有关更多信息,请参见网络指南。 默认:
|
只能在“ 兔子”部分下的高级配置文件中设置以下配置设置。
键 | 文献资料 |
---|---|
msg_store_index_module | 队列索引的实现模块。建议您 在更改此内容之前阅读消息存储调整文档。 默认值:rabbit_msg_store_ets_index
|
backing_queue_module | 队列内容的实现模块。 默认:
|
msg_store_file_size_limit | 消息存储段文件的大小。对于具有现有(已初始化)数据库的节点更改此设置很危险,可能导致数据丢失! 默认值:16777216
|
trace_vhosts | 由跟踪器内部使用。你不应该改变这个。 默认:
|
msg_store_credit_disc_bound | 消息存储给予队列处理的功劳。 默认情况下,为队列进程分配4000个消息存储信用,然后为它处理的每800条消息分配800个信用。 由于内存压力而需要分页的邮件也将使用此信用。 消息存储是信用流链中的最后一个组件。了解信贷流量。 仅当消息持久保存到消息存储中时,此值才生效。如果消息嵌入在队列索引中,则修改此设置无效,因为在写入队列索引时不使用credit_flow。 默认:
|
queue_index_max_journal_entries | 在多少个队列索引日志条目之后,它将刷新到磁盘。 默认:
|
lazy_queue_explicit_gc_run_operation_threshold | 仅在内存不足时才可用于懒惰队列的可调值。这是触发垃圾收集器和其他内存减少活动的阈值。较低的值可能会降低性能,而较高的值可以提高性能,但会导致更高的内存消耗。您几乎可以肯定不应该更改此设置。 默认:
|
queue_explicit_gc_run_operation_threshold | 仅在内存不足时可用于普通队列的可调值。这是触发垃圾收集器和其他内存减少活动的阈值。较低的值可能会降低性能,而较高的值可以提高性能,但会导致更高的内存消耗。您几乎可以肯定不应该更改此设置。 默认:
|
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://弗雷德:[email protected]/my_vhost”' mypassphrase
{encrypted,<< “ ...长加密值...” >>}
或者,在Windows上:
rabbitmqctl编码“ <<” “来宾” “ >>” mypassphrase
{encrypted,<< “ ...长加密值...” >>}
rabbitmqctl编码' “AMQP://弗雷德:[email protected]/my_vhost”' mypassphrase
{encrypted,<< “ ...长加密值...” >>}
如果要解密值,请添加解码命令:
rabbitmqctl解码'{encrypted,<<“ ...” >>}' mypassphrase
<< “客人” >>
rabbitmqctl解码'{encrypted,<<“ ...” >>}' mypassphrase
“ amqp:// fred:[email protected]/my_vhost”
或者,在Windows上:
rabbitmqctl解码“ {encrypted,<<” “ ...” “ >>}” mypassphrase
<< “客人” >>
rabbitmqctl解码“ {encrypted,<<“ ” ...“ ” >>}“ mypassphrase
” amqp:// fred:[email protected]/my_vhost“
可以对不同类型的值进行编码。上面的示例对二进制文件(<<“ guest” >>)和字符串(“ amqp:// fred:[email protected]/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标志等等。
一些环境变量配置路径和位置(节点的基本或数据目录,插件源目录和扩展目录,等等)。这些路径必须排除许多字符:
以上字符将使节点无法启动或正常运行(例如,扩展插件并加载其元数据)。
在基于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服务用户将需要重新安装该服务。否则,将不会更新服务使用的环境变量。
可以使用安装程序或在具有管理员权限的命令行上完成此操作:
设置 RABBITMQ_BASE = C:\ Data \ RabbitMQ
这将以使环境变量和rabbitmq-env-conf.bat更改可观察到的方式重启节点 。
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组合的节点名称应该唯一。要运行多个节点,请参阅集群指南。 默认值:
|
RABBITMQ_CONFIG_FILE | RabbitMQ主配置文件路径,例如 /etc/rabbitmq/rabbitmq.conf或/data/configuration/rabbitmq.conf(用于新样式配置格式文件)。如果使用经典配置格式,则扩展名必须为.config 或可以完全省略。 默认值:
|
RABBITMQ_ADVANCED_CONFIG_FILE | “高级”(基于Erlang术语)RabbitMQ配置文件路径,扩展名为.config。例如,/ data/rabbitmq/advanced.config。 默认值:
|
RABBITMQ_CONF_ENV_FILE | 包含环境变量定义的文件的位置(不带RABBITMQ_ 前缀)。请注意,Windows上的文件名不同于其他操作系统。 默认值:
|
RABBITMQ_MNESIA_BASE | 该基本目录包含RabbitMQ服务器的节点数据库,消息存储和集群状态文件的子目录,每个节点一个子目录,除非明确设置了RABBITMQ_MNESIA_DIR。有效的RabbitMQ用户必须有足够的权限随时读取,写入和创建此目录中的文件和子目录,这一点很重要。通常不会覆盖此变量。通常会改写RABBITMQ_MNESIA_DIR。 默认值:
|
RABBITMQ_MNESIA_DIR | 该RabbitMQ节点的数据存储目录。这包括架构数据库,消息存储,集群成员信息和其他持久节点状态。 默认值:
|
RABBITMQ_PLUGINS_DIR | 插件档案文件 所在的目录列表。这是类似PATH的变量,其中不同的路径由OS特定的分隔符分隔(::对于Unix ,;对于Windows)。插件可以安装到此处列出的任何目录中。不得包含路径限制部分中提到的任何字符。 默认值:
|
RABBITMQ_PLUGINS_EXPAND_DIR | 节点将插件扩展(解压)插件的目录,并将其用作代码路径位置。不得包含路径限制部分中提到的任何字符。 默认值:
|
RABBITMQ_USE_LONGNAME | 设置为true时,这将导致RabbitMQ使用完全限定的名称来标识节点。在使用完全限定域名的环境中,这可能会很有用。请注意,在不重置节点的情况下,不可能在使用短名称和长名称之间进行切换。 默认值:false |
RABBITMQ_SERVICENAME | 已安装的Windows服务的名称。这将出现在 services.msc中。 默认值:RabbitMQ。 |
RABBITMQ_CONSOLE_LOG | 将此变量设置为new或重新使用, 以将控制台输出从服务器重定向到默认RABBITMQ_BASE目录中名为%RABBITMQ_SERVICENAME%的文件。
默认值:(无) |
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_SERVER_ADDITIONAL_ERL_ARGS | 调用RabbitMQ服务器时使用 的erl命令的附加参数。此变量的值附加到默认参数列表(RABBITMQ_SERVER_ERL_ARGS)。 默认值:
|
RABBITMQ_SERVER_START_ARGS | 调用RabbitMQ服务器时使用 的erl命令的附加参数。这不会覆盖 RABBITMQ_SERVER_ERL_ARGS。 默认值:(无) |
除了上面列出的变量之外,还有几个环境变量可以告诉RabbitMQ 在哪里找到其数据库,日志文件,插件,配置等。
最后,某些环境变量是特定于操作系统的。
名称 | 描述 |
---|---|
主机名 | 当前机器的名称。 默认值:
|
电脑名称 | 当前机器的名称。 默认值:
|
ERLANG_SERVICE_MANAGER_PATH | 此路径是erlsrv.exe(Erlang服务包装器脚本)的位置。 默认值:
|
大多数操作系统都对内核资源施加限制:虚拟内存,堆栈大小,打开的文件句柄等等。对于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模块并重新登录或重新引导。