Rabbitmq - 配置

目录

  • 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_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

  • 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_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术语格式的配置文件

  • 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java EE CDI限定词:快速浏览

在上下文和依赖注入&#xff08;CDI&#xff09;中&#xff0c; 限定符是类型安全和松散耦合的主体。 为什么&#xff1f; 没有CDI&#xff0c;我们将以类似于下面的方式注入Java EE组件 注意&#xff1a;这实际上不会编译&#xff0c;只是假设的代码片段 例子1 例子2 上述…

Windows 系统光盘刻录教程-光盘怎样刻录?刻录数据光盘用轨道一次写入还是光盘一次写入?...

刻录光盘需要 DVD-RW 的光驱&#xff0c;并且光盘需要 DVD-R 的光盘用于刻录。刻录工具可以使用 https://cn.ultraiso.net/ 来进行刻录。选择软件目录 中 工具 &#xff0c;选择 刻录光盘映像 即可进行配置&#xff1a; 此时涉及到了光盘写入的方式的选择问题&#xff0c;在网上…

webpack编译时No PostCSS Config的解决方法

1. {loader:"postcss-loader",options: { // 如果没有options这个选项将会报错 No PostCSS Config foundplugins: (loader) > [require(autoprefixer)(), //CSS浏览器兼容]}}2.在项目根目录新建 postcss.config.js文件&#xff0c;并对 postcss进行配置…

c语言库文件是dll还是lib,C语言之静态链接库与动态链接库(2)

我们发现&#xff0c;无论是静态链接库还是动态链接库&#xff0c;最后都有lib文件&#xff0c;那么两者区别是什么呢&#xff1f;其实&#xff0c;两个是完全不一样的东西。静态库对应的lib文件叫静态库&#xff0c;动态库对应的lib文件叫导入库。实际上静态库本身就包含了实际…

NTC3950-10K温度传感器

一、计算公式 补充&#xff1a; B3950 R10K T225度 查RT表&#xff0c;25度对应的是10K 电路&#xff1a;   热敏电阻与上拉电阻R813分压&#xff0c;获取温度与Vo电压的关系&#xff0c;在根据Vo折算出与MCU ADC的数值。 再将ADC代出Rt&#xff0c;即得到ADC与T的关系公式。…

使不安全变得更加安全

总览 如果直接使用Unsafe&#xff0c;则可能会导致JVM崩溃。 当您访问尚未映射的内存页面并且在Unix上的结果是SIGSEG&#xff08;如果您访问页面0&#xff09;或SIGBUS&#xff08;如果您访问另一个未映射的页面&#xff09;时&#xff0c;就会发生这种情况。 使用MethodHand…

二分搜索树的基本实现

基本操作的动画演示 插入&#xff08;略&#xff09; 搜索&#xff08;略&#xff09; 删除节点 代码 package com.yunche.datastructure;import java.util.LinkedList; import java.util.Queue;/*** ClassName: BST* Description: 二叉搜索树&#xff1a;每个节点的左子树的值…

js ||

||或位符号 a || b 1.当a ,b 均为true时&#xff0c;return a 2.当 a,b均为false时&#xff0c;return b 3.当a,b为一false一true,return true的那个值 && 与位符号 a&&b 1.当a,b均为true时&#xff0c;return b 2.当&#xff0c;b均为false时&#xff…

计算机c语言二级题型,计算机二级C语言题型和评分标准

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼全国计算机二级考试大题把题目给定程序删除了&#xff0c;正确运行&#xff0c;这样会不会给分&#xff1f;50、请编写函数fun, 函数的功能是: 将M行N列的二维数组中的数据, 按列的顺序依次放到一维数组中。函数fun中给出的语句仅供…

什么是Mockito Extra接口?

如果要编写轻量级的JUnit测试&#xff0c; Mockito是我最喜欢的小帮手。 如有必要&#xff0c;可以通过模拟轻松地替换被测单元的“实际”依赖关系&#xff0c;这非常有用。 尤其是在处理框架API的边界线时&#xff0c;此类依赖项的设置否则可能非常昂贵。 但是有时候情况要复…

d9900 修改ip 思科dcm_思科设备SSH登陆详细配置过程

思科设备SSH登陆详细配置过程我们用GNS3进行拓扑搭建。实验拓扑图如下&#xff1a;进行完基本配置之后开始配置SSH服务器(R2)1.首先验证设备是否支持SSHR2#show ip ssh能够识别这条命令就说明支持。2.配置IP域名。使用config# ip domain-name domain-name全局配置模式命令配置网…

scrapy框架使用splash渲染引擎爬取动态页面

1.启动docker&#xff0c;在命令行里输入 docker run -p 8050:8050 scrapinghub/splash在docker上运行splash引擎 2.接下来就可以来写爬虫文件了 首先在setting里配置 splash_urlhttp://loaclhost:8050 DUPEFLITERscrapy_splash.SplashAwareDupeFilterDOWNLOADER_MIDDLEWARES …

Testing BlogJet

I have installed an interesting application - BlogJet. Its a cool Windows client for my blog tool (as well as for other tools). Get your copy here: http://blogjet.com"Computers are useless. They can only give you answers." -- Pablo Picasso转载于:…

async,await

function timeout(ms){return new Promise(function(resolve){setTimeout(resolve,ms)}) }async function asyncPrint(value,ms){await timeout(ms);console.log(value) } asyncPrint(hello world,5000) 这段代码是过了5秒再显示hello world await是要等待这句代码执行完&…

Homebrew是什么?怎么关闭自动更新?

Homebrew是MacOS 的软件包管理器。 通过它可以安装、卸载、更新、查看、搜索任何想要安装的软件。如&#xff1a;git, node等。 安装Homebrew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 查看Homebrew br…

C语言中case后面有空格吗,C语言中switch case语句可变参实现方法(case 参数 空格...空格 参数 :)...

正常情况下&#xff0c;switch case语句是这么写的&#xff1a;switch(参数){case1:...;break;case2:...;break;default:...break;}这种是我们最常见的写法&#xff0c;当然也可以这么写&#xff1a;switch(参数){case1:case2:case3:case4:...;break;default:...;break;}接下来…

java 把string转为keyevent_盘点现在Java强大第三方库(字符串操作),程序员都该知道!...

1.字符串与集合间的转化引用第三方库 Apache Commons Lang jre连接值得一提的自JDK1.8以后字符串集合转为字符串可以使用String类下的join()方法,但别的数据类型还是要依靠第三方库--对比JDK和第三库代码如下我自己是一名从事了多年开发的java老程序员&#xff0c;这段时间整理…

Redis安装文档

1.前置条件 前置条件&#xff1a;linux已经可以上网&#xff0c;参考&#xff1a;https://www.cnblogs.com/ZenoLiang/p/10201875.html 2.安装redis 2.1依赖包检查 1. yum install cpp -y 2. yum install binutils -y 3. yum install glibc-kernheaders -y 4. yum install…

JDK 8的启发性Javadoc

标准JDK 8 API文档的一个不错的功能之一就是能够查看所有或不同类别的方法&#xff0c;正如我在博客文章JDK 8 Javadoc Tweaked For Methods Listings中所讨论的那样。 尽管这种分类既方便又有用&#xff0c;但是与JDK 8中许多新类和程序包相关联的文本注释无疑更有用&#xff…

我用Mono(1)

我在Mono 0.1就开始关注和试用Mono了。我印象最深的一次是&#xff0c;我在FreeBSD里编译好了Mono&#xff08;FreeBSD装在VPC里&#xff09;。我用了同样的算法写了一个CS文件和JAVA文件。然后在虚拟机的FreeBSD的Mono下编译运行&#xff0c;把Java文件在真实机器的Windows XP…