Rabbitmq - 配置

本文介绍了RabbitMQ的配置方法。默认配置可使RabbitMQ有效运行,但生产环境需定制化。定制方式有环境变量、配置文件、运行时参数和策略三种。文中说明了配置文件路径、环境变量设置及优先级,对比了不同格式配置文件,还介绍了运行时参数的类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RabbitMQ 配置

简介

默认配置,已经可以有效地运行RabbitMQ,并且在大多数情况下不需要更改配置。不过为了在生产环境中稳定、高效的运行,RabbitMQ提供了三种方式来定制化服务

  • 环境变量
  • 配置文件
  • 运行时参数和策略



配置文件路径可以再启动日志中找到

2019-05-24 01:55:19.253 [info] <0.8.0> Log file opened with Lager
2019-05-24 01:55:19.752 [info] <0.289.0> 
 Starting RabbitMQ 3.7.15 on Erlang 22.0
 Copyright (C) 2007-2019 Pivotal Software, Inc.
 Licensed under the MPL.  See https://www.rabbitmq.com/
2019-05-24 01:55:19.753 [info] <0.289.0> 
 node           : rabbit@node1
 home dir       : /root
 config file(s) : (none)
 cookie hash    : d/zE3xrt478dueqdlI+ZiA==
 log(s)         : /opt/rabbitmq_server-3.7.15/var/log/rabbitmq/rabbit@node1.log
                : /opt/rabbitmq_server-3.7.15/var/log/rabbitmq/rabbit@node1_upgrade.log
 database dir   : /opt/rabbitmq_server-3.7.15/var/lib/rabbitmq/mnesia/rabbit@node1
2019-05-24 01:55:20.262 [info] <0.289.0> Running boot step pre_boot defined by app rabbit

期待的配置文件路径
文件不存在可以手动创建

  • Generic UNIX: $RABBITMQ_HOME/etc/rabbitmq/
  • RPM: /etc/rabbitmq/
  • Windows: %APPDATA%\RabbitMQ

如何检查生效的配置项

[root@node1 rabbitmq]# rabbitmqctl environment

环境变量

RabbitMQ的环境变量都是以"RABBITMQ_"开头的,可以再shell环境中设置,也可以在rabbitmq-env.conf配置文件中设置。
如果在非shell环境中设置需要将“RABBITMQ_”去掉。

配置优先级

  1. shell环境
  2. rabbitmq-env.conf配置文件
  3. 默认的配置

rabbitmq-env.conf默认在$RABBITMQ_HOME/etc/rabbitmq/目录下,也可以在启动时指定RABBITMQ_CONF_ENV_FILE变量来设置此文件的路径

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

# 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_NODE_IP_ADDRESS绑定的网络接口默认为空字符串表示绑定本机所有的网络接口
RABBITMQ_NODE_PORT5672
RABBITMQ_DIST_PORTRabbitMQ节点内部通信的端口号。如果设置了kernel.inet_dist_listen_min or kernel.inet_dist_listen_max时,此环境变量将被忽略RABBITMQ_NODE_PORT + 20000
RABBITMQ_DISTRIBUTION_BUFFER_SIZE节点之间通信连接的数据缓冲区大小默认为128000,该值建议不要使用低于64MB
RABBITMQ_IO_THREAD_POOL_SIZE运行时用于io的线程数建议不要低于32,linux默认为128 ,windows默认为64
RABBITMQ_NODENAMErabbitmq节点名称,集群中要注意节点名称唯一linux 默认节点名为 rabbit@$hostname
RABBITMQ_CONFIG_FILErabbitmq 的配置文件路径,注意不要加文件的后缀(.conf)默认 $RABBITMQ_HOME/etc/rabbitmq/rabbitmq(二进制安装) /etc/rabbitmq/rabbitmq(rpm 安装)
RABBITMQ_ADVANCED_CONFIG_FILEadvanced.config文件路径默认 $RABBITMQ_HOME/etc/rabbitmq/advanced(二进制安装) /etc/rabbitmq/advanced(rpm 安装)
RABBITMQ_CONF_ENV_FILE环境变量配置文件路径默认 $RABBITMQ_HOME/etc/rabbitmq/rabbitmq-env.conf(二进制安装) /etc/rabbitmq/rabbitmq-env.conf(rpm 安装)
RABBITMQ_USE_LONGNAME
RABBITMQ_SERVICENAME

配置文件

在RabbitMQ3.7.0Z之前,RabbitMQ配置文件被命名为rabbitmq.config,并使用Erlang语法配置。
运行3.7.0或更高版本仍然支持之前的配置,但建议使用新的sysctl格式。

sysctl格式与erlang格式配置文件对比

sysctl 格式

ssl_options.cacertfile           = /path/to/testca/cacert.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
Erlang 格式
[
  {rabbit, [{ssl_options, [{cacertfile,           "/path/to/testca/cacert.pem"},
                           {certfile,             "/path/to/server_certificate.pem"},
                           {keyfile,              "/path/to/server_key.pem"},
                           {verify,               verify_peer},
                           {fail_if_no_peer_cert, true}]}]}
].
  • sysctl 格式易于自动化部署工具生成和人类编辑
  • 相对于Erlang格式 有局限。一些使用深度嵌套的数据结构仍然需要Erlang格式的支持

rabbitmq.conf

配置项描述默认值
listeners要监听 AMQP 0-9-1 and AMQP 1.0 的端口listeners.tcp.default = 5672
num_acceptors.tcp接受tcp连接的erlang 进程数num_acceptors.tcp = 10
handshake_timeoutAMQP 0-9-1 超时时间,也就是最大的连接时间,单位毫秒handshake_timeout = 10000
listeners.ssl启用TLS的协议默认值为none
num_acceptors.ssl接受基于TLS协议的连接的erlang 进程数num_acceptors.ssl = 10
ssl_optionsTLS 配置ssl_options =none
ssl_handshake_timeoutTLS 连接超时时间 单位为毫秒ssl_handshake_timeout = 5000
vm_memory_high_watermark触发流量控制的内存阈值,可以为相对值(0.5),或者绝对值 vm_memory_high_watermark.relative = 0.6 ,vm_memory_high_watermark.absolute = 2GB默认vm_memory_high_watermark.relative = 0.4
vm_memory_calculation_strategy内存使用报告策略,assigned:使用Erlang内存分配器统计信息
rss:使用操作系统RSS内存报告。这使用特定于操作系统的方法,并可能启动短期子进程。
legacy:使用遗留内存报告(运行时认为将使用多少内存)。这种策略相当不准确。erlang 与legacy一样 是为了向后兼容
vm_memory_calculation_strategy = allocated
vm_memory_high_watermark_paging_ratio内存高水位百分比阈值,当内存的使用达到阈值时,队列开始将消息分页到磁盘以释放内存vm_memory_high_watermark_paging_ratio = 0.5
total_memory_available_override_value该参数用于指定系统的可用内存总量,一般不使用,适用于在容器等一些获取内存实际值不精确的环境(获取内存值与实际内存值相差较大)默认未设置
disk_free_limit存储数据分区的可用磁盘空间限制当可用空间低于阈值时,流控将被触发。disk_free_limit.absolute = 50MB
log.file.level控制记录日志的等级,有info,error,warning,debuglog.file.level = info
channel_max最大通道数,但不包含协议中使用的特殊通道号0,设置为0表示无限制,不建议使用该值,容易出现channel泄漏,过多的channel会增加broker内存的占用channel_max = 2047
channel_operation_timeout通道操作超时,单位为毫秒channel_operation_timeout = 15000
heartbeat表示连接参数协商期间服务器建议的心跳超时的值。如果两端都设置为0,则禁用心跳,不建议禁用heartbeat = 60
default_vhostrabbitmq安装后启动创建的虚拟主机default_vhost = /
default_user默认创建的用户名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允许通过回环地址连接到rabbitmq的用户列表,如果要允许guest用户远程连接(不安全)请将该值设置为none,如果要将一个用户设置为仅localhost连接的话,配置loopback_users.username =true(username要替换成用户名)
限制用户只能本地连接loopback_users.monitoring = true
monitoring是用户名
loopback_users.guest = true(默认guest只能本地连接)
cluster_formation.classic_config.nodes配置集群节点
cluster_formation.classic_config.nodes.1 = rabbit@hostname1
cluster_formation.classic_config.nodes.2 = rabbit@hostname2
默认none
collect_statistics统计数据的收集模式,主要与 RabbitMQ Management插件相关,
none: 不发出统计信息事件
coarse: 每个队列连接都发送统计一次
fine: 每发一条消息的统计数据
collect_statistics = none
collect_statistics_interval统计数据收集时间间隔,以毫秒为单位collect_statistics_interval = 5000
management_db_cache_multiplier缓存代价较高的查询 缓存将把最后一个查询的运行时间乘以这个值,并在此时间内缓存结果。management_db_cache_multiplier = 5
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
hipe_compile设置为true以使用HiPE预编译RabbitMQ的部分,HiPE是Erlang的即时编译器,启用HiPE可以提高吞吐,但启动时会延迟几分钟。Erlang运行时必须包含HiPE支持。如果不是,启用此选项将不起作用。HiPE在某些平台上根本不可用,尤其是Windows。hipe_compile = false
cluster_partition_handling如何处理网络分区。有四种方式 ignore、autoheal、pause_minority、pause_if_all_down 。 pause_if_all_down模式需要额外的参数:nodes、recovercluster_partition_handling = ignore
cluster_keepalive_interval向其他节点发送存活消息的频率。单位为毫秒。丢失存活消息不会导致节点被认为已失效cluster_keepalive_interval = 10000
queue_index_embed_msgs_below消息的字节大小,小于该大小,消息将直接嵌入队列索引中 单位为Bqueue_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队列的定位的策略,即创建队列时以什么策略判断坐落的broker节点。如果配置了镜像,则这里指master镜像的定位策略。可用的策略 min-masters,client-local,randomqueue_master_locator = client-local
proxy_protocol如果设置为true ,则连接需要通过反向代理连接,不能直连接proxy_protocol = false

advanced.config

一些不能使用sysctl格式的配置项或者使用sysctl格式不方便的配置项,可以使用Erlang术语格式的配置文件

配置项描述默认值
msg_store_index_module设置队列索引使用的模块消息存储调优 Default: rabbit_msg_store_ets_index
{rabbit,[{msg_store_index_module, rabbit_msg_store_ets_index}]}
backing_queue_module队列内容的实现模块。{rabbit, [{backing_queue_module, rabbit_variable_queue}]}
msg_store_file_size_limit消息储存的文件大小,现有的节点更改是危险的,可能导致数据丢失Default: 16777216
{rabbit, [
%% Changing this for a node
%% with an existing (initialised) database is dangerous can
%% lead to data loss!
{msg_store_file_size_limit, 16777216}
]}
trace_vhosts内部的tracer使用,不建议更改{rabbit, [
{trace_vhosts, []}
]}
msg_store_credit_disc_bound设置消息储存库给队列进程的积分,默认一个队列进程被赋予4000个消息积分{rabbit, [
{msg_store_credit_disc_bound, {4000, 800}}
]}
queue_index_max_journal_entries队列的索引日志超过该阈值将刷新到磁盘{rabbit, [
{queue_index_max_journal_entries, 32768}
]}
lazy_queue_explicit_gc_run_operation_threshold在使用惰性队列(lazy queue)时进行内存回收动作的阈值。值底性能降低,值高性能提高,但是会导致更高的内存消耗。{rabbit, [
{lazy_queue_explicit_gc_run_operation_threshold, 1000}
]}
queue_explicit_gc_run_operation_threshold在使用正常队列时进行内存回收动作的阈值。值低降低性能,值高性能提高,但是会消耗更多的内存。{rabbit, [
{queue_explicit_gc_run_operation_threshold, 1000}
]}

运行时参数和策略

rabbitmq中大部分配置都可以在配置文件中完成,重启后生效,但有些配置不适合写在配置文件中
比如:有些需要更改需要立即生效

Parameter可以通过rabbitmqctl或者管理插件提供的HTTP API来设置。

Parameter分为两种

  • vhost级别
    • 绑定到vhost。由组件名称(component name)、名称(name)和值组成
  • global级别
    • 不绑定vhost,全局生效。由名称和值组成

未完待续

参考
 RabbitMQ官网 https://www.rabbitmq.com/
《RabbitMQ实战指南》
 RabbitMQ生产部署指南 https://www.cnblogs.com/operationhome/p/10483840.html

转载于:https://www.cnblogs.com/mldblue/articles/10939276.html

### RabbitMQ Server 与 RabbitMQ-server.bat 的区别 `rabbitmq-server` 是 RabbitMQ 消息队列的核心服务程序名称,而 `rabbitmq-server.bat` 则是一个用于在 Windows 平台上启动 RabbitMQ 服务的批处理脚本文件。 #### 1. **RabbitMQ-server** 这是 RabbitMQ 主进程的实际可执行文件,在 Linux 或其他类 Unix 系统中通常位于 `/usr/sbin/rabbitmq-server` 路径下。它负责运行 RabbitMQ 服务器的主要功能,包括消息传递、队列管理以及与其他组件(如插件)交互的功能[^3]。 - 在 Linux 上通过命令行直接调用时,可以附加参数来控制其行为,例如调试模式或指定配置文件位置。 - 启动方式通常是通过 systemctl 命令或者手动执行该二进制文件完成服务初始化过程。 #### 2. **RabbitMQ-server.bat** 此 `.bat` 文件专为 Microsoft Windows 设计并提供给用户作为便捷工具使用的一部分[^2]。它的主要作用是以更友好的形式封装了复杂的底层逻辑以便于开发者轻松地管理和操作 RabbitMQ 实例: - 当用户双击这个批处理文件或将之纳入自动化流程当中时,实际上会间接触发 Erlang VM 来加载真正的核心应用程序——即前述提到过的 rabbitmq_server 应用本身; - 此外还包含了针对特定平台所做的额外设置调整工作比如环境变量定义等必要准备工作; 因此可以说两者之间存在紧密联系却又各自承担不同职责范围内的任务角色划分情况如下表所示: | 属性 | rabbitmq-server | rabbitmq-server.bat | |--------------------|------------------------------------------|-----------------------------------------| | **操作系统支持** | 主要面向Linux及其他Unix-like系统 | 针对Windows设计 | | **本质属性** | 可执行的服务入口 | 批处理脚本 | | **用途描述** | 启动和维护RabbitMQ服务 | 提供简单接口以简化跨平台兼容性的实现 | 综上所述,虽然它们的名字非常相似甚至容易混淆但实际上分别适用于不同的场景需求并且有着明确分工界限. ```batch @echo off setlocal enabledelayedexpansion rem Example content of rabbitmq-server.bat might look like this: call "%~dp0erl.exe" -boot start_clean ... ``` 以上展示了如何利用 batch scripting 技术构建起围绕 erlang runtime environment 构建起来的应用生态系统的一个侧面视角而已!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值