目录

  • RabbitMQ 配置

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

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.0Copyright (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@node1home dir       : /rootconfig 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.logdatabase 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_PORT 5672
RABBITMQ_DIST_PORT RabbitMQ节点内部通信的端口号。如果设置了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_NODENAME rabbitmq节点名称,集群中要注意节点名称唯一 linux 默认节点名为 rabbit@$hostname
RABBITMQ_CONFIG_FILE rabbitmq 的配置文件路径,注意不要加文件的后缀(.conf) 默认 $RABBITMQ_HOME/etc/rabbitmq/rabbitmq(二进制安装) /etc/rabbitmq/rabbitmq(rpm 安装)
RABBITMQ_ADVANCED_CONFIG_FILE advanced.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

  • key/value 键值对结构
  • 以#开头的为注释行
  • 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_timeout AMQP 0-9-1 超时时间,也就是最大的连接时间,单位毫秒 handshake_timeout = 10000
listeners.ssl 启用TLS的协议 默认值为none
num_acceptors.ssl 接受基于TLS协议的连接的erlang 进程数 num_acceptors.ssl = 10
ssl_options TLS 配置 ssl_options =none
ssl_handshake_timeout TLS 连接超时时间 单位为毫秒 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,debug log.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_vhost rabbitmq安装后启动创建的虚拟主机 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、recover cluster_partition_handling = ignore
cluster_keepalive_interval 向其他节点发送存活消息的频率。单位为毫秒。丢失存活消息不会导致节点被认为已失效 cluster_keepalive_interval = 10000
queue_index_embed_msgs_below 消息的字节大小,小于该大小,消息将直接嵌入队列索引中 单位为B 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 队列的定位的策略,即创建队列时以什么策略判断坐落的broker节点。如果配置了镜像,则这里指master镜像的定位策略。可用的策略 min-masters,client-local,random queue_master_locator = client-local
proxy_protocol 如果设置为true ,则连接需要通过反向代理连接,不能直连接 proxy_protocol = false

advanced.config

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

  • advanced.config 示例
配置项 描述 默认值
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 - 配置相关推荐

  1. 第二节 RabbitMQ配置

    第二节 RabbitMQ配置 原文:第二节 RabbitMQ配置 版权声明:未经本人同意,不得转载该文章,谢谢 https://blog.csdn.net/phocus1/article/detail ...

  2. RabbitMQ配置之mandatory,publisher-returns相关

    在SpringBoot的RabbitMQ配置中,有如下一项: spring.rabbitmq.template.mandatory = true 官方注释: Enable mandatory mess ...

  3. 【深入理解RabbitMQ原理】RabbitMQ 配置,生产者和消费者

    RabbitMQ 配置,生产者和消费者 1. 生产者的配置 1)配置都要先声明队列 队列的声明方式: <rabbit:queueid="Bgate_Bgate1001Response_ ...

  4. RabbitMq 配置分离 - 职责单一原则

    文章目录 RabbitMq 配置分离 - 职责单一原则 1.创建交换机 2.定义队列 3.创建队列工厂向Spring 注册队列Bean 4.指定路由规则 RabbitMq 配置分离 - 职责单一原则 ...

  5. channel rabbitmq 配置_「喵咪MQ(2)」RabbitMQ单机模式使用

    哈喽!本周我们又见面了,今天呢我们接着说MQ软件RabbitMQ的故事,在上小节以及成功的安装了RabbitMQ也配置了开机启动,那么我们应该要开始的真正的接触并且使用它来管理使用解决业务问题,请紧张 ...

  6. RabbitMQ配置Mqtt协议

    MQTT插件支持MQTT 3.1.1 ,同时也可以i让MQTT客户端与其他协议(AMQP 0-9-1.AMQP 1.0和 STOMP)客户端交互 .支持多租户. (1) 启用插件 安装完RabbitM ...

  7. RabbitMQ配置环境变量后启动不了的解决方法

    我的rabbitmq安装位置 /usr/local/rabbitmq 第一步,所以建立软连接 ln -s /usr/local/rabbitmq/rabbitmqctl /usr/local/bin ...

  8. rabbitmq配置证书

    准备证书 ca证书 server证书 私钥 阿里云中下载pfx证书.使用如下方式转化成Rabbitmq需要配置的证书:提取ca证书: openssl pkcs12 -in www.xxxx.com.p ...

  9. rabbitMQ配置外网连接

    由于rabbitmq3.0以后的版本默认guest只能从localhost连接不能使用远程连接,所以我们要设置外网连接 找到rabbitmq的安装位置,cd进去然后在里面找到etc/rabbitmq, ...

最新文章

  1. CES 2018即将揭幕:AI平台之争烽烟骤起
  2. Python多线程中阻塞(join)与锁(Lock)的使用误区
  3. centos下添加的端口不能访问(防火墙关闭)
  4. String 转 const char*
  5. c语言程序设计函数6,C语言程序设计》第6章函数-XiamenUniversity.PDF
  6. C#多线程编程系列(一)- 简介
  7. java泰拉轴距_Java面向对象
  8. 击破区块链应用落地之痛,爆款公链太硬核!
  9. 小米高层调整;B 站回应腾讯成第一大股东;PHP 7.4.3 发布 | 极客头条
  10. SpringBoot使用H2内嵌数据库
  11. object-c的继承
  12. cgcs2000大地坐标系地图_CGCS2000坐标系和WGS84坐标系的区别联系
  13. RIPS user guide for fresh
  14. iOS bounds备忘
  15. 一文看懂 webpack 的所有 source map !
  16. 一些关于 CAD数据库 插入字段
  17. h5+css3基础面试题
  18. CleanMyMacX2022苹果mac电脑应用软件
  19. ansys添加力矩_ANSYS如何施加转矩(周向载荷) -
  20. Python入门(三)--- 元组,字典,集合

热门文章

  1. php自动释放mysql连接,php怎么关闭mysql连接
  2. Jsp、Servlet
  3. ruby中的self
  4. 今天才知道css hack是什么
  5. 两款开源Web功能测试工具
  6. MATLAB的VLFeat工具箱
  7. 基于国家标准的 EndNote 输出样式模板
  8. 修改jwt过期时间_PostgreSQL如何修改用户过期时间
  9. 机器学习从入门到精通50讲(一)-大数据平台下的数据质量管理
  10. java string blob_java String类型转换为Blob类型