找回密码
 注册
查看: 4951|回复: 1

rabbitmq详解

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2017-9-28 15:10:59 | 显示全部楼层 |阅读模式
RabbitMQ支持三种配置方式:
  1) 读取环境变量中配置, 这包括shell中环境变量和rabbitmq-env.conf/rabbitmq-env-conf.bat文件中配置的环境变量
    可配置如端口、配置文件指定自定义位置、节点名字等信息。
  2) 读取配置文件rabbitmq.config
    可配置权限、集群、插件设置等高级信息, 当然也可配置端口等简单信息
  3) 通过运行命令时指定参数
    通常用来配置集群范围信息, 用来运行时动态传入

8 |& F5 x% J5 G+ y! ^$ n
环境变量读取优先级
  1) 读取shell中环境变量
  2) 读取rabbitmq-env.conf/rabbitmq-env-conf.bat中的
  3) 读取默认的

! g; k7 |* z1 Y3 ]
rabbitmq-env.conf/rabbitmq-env-conf.bat 详解(颜色标注的为常用配置)
变量名称默认值描述
RABBITMQ_NODE_IP_ADDRESS默认为空字符串, 即绑定所有网络接口 如果想绑定到一个固定的IP可以使用此变量. 如果要绑定到两个或两个以上只能通过rabbitmq.config中的tcp_listeners来设置。
RABBITMQ_NODE_PORT5672 供客户端建立连接端口
RABBITMQ_DIST_PORTRABBITMQ_NODE_PORT + 20000 用于节点和CLI工具连接的端口, 如果rabbitmq.config中配置了kernel.inet_dist_listen_min 或 kernel.inet_dist_listen_max该参数将被忽略
RABBITMQ_NODENAME
  • Unix*: rabbit@$HOSTNAME
  • Windows: rabbit@%COMPUTERNAME%
    : I, `# g& w$ n9 Y, T, w; B# k7 N
节点名字, 必须唯一
RABBITMQ_CONF_ENV_FILE
  • Generic UNIX - $RABBITMQ_HOME/etc/rabbitmq/
  • Debian - /etc/rabbitmq/
  • RPM - /etc/rabbitmq/
  • Mac OS X (Homebrew) - ${install_prefix}/etc/rabbitmq/, the Homebrew prefix is usually /usr/local
  • Windows - %APPDATA%\RabbitMQ\9 v& J3 P/ U1 \4 y7 P
rabbitmq-env.conf/rabbitmq-env-conf.bat 默认位置, 不同系统不同安装方式位置也不同, 如果默认位置没找到则需在该位置手动创建一个
RABBITMQ_CONFIG_FILE
同上
rabbitmq.config 默认位置。 如果默认位置没找到则需在该位置手动创建一个
RABBITMQ_USE_LONGNAME 官网没说。。。。应该是false。。。
取值: true 或 false。
如果配置为true, 这将导致RabbitMQ使用完全限定的名称来标识节点
RABBITMQ_SERVICENAMEWindows Service: RabbitMQ服务名称
RABBITMQ_CONSOLE_LOG只在控制台输出日志, 日志不会持久化到文件
取值: new 或 reuse。
两种取值都是将控制台输出从服务器重定向到名为%rabbitmqservicename%(上面那个变量)的文件。
  1)默认: 不设置, 控制台的日志不会被持久化到文件
  2)new: 每次启动时都会创建一个新的文件
  3)reuse: 每次启动服务器都会重用该日志文件
RABBITMQ_CTL_ERL_ARGSNone在调用rabbitmqctl时使用的erl命令的参数。应该仅用于调试目的。
RABBITMQ_SERVER_ERL_ARGS
  • Unix*:"+K true +A30 +P 1048576 -kernel inet_default_connect_options [{nodelay,true}]"
  • Windows: None
    $ ^' L( R5 r$ `' X
在调用RabbitMQ服务器时使用的erl命令的标准参数, 应该仅用于调试目的
RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS
  • Unix*: None
  • Windows: None) X$ M4 {" n& D. m
在调用RabbitMQ服务器时使用的erl命令的附加参数。这个变量的值被附加到参数的默认列表(RABBITMQ_SERVER_ERL_ARGS).
RABBITMQ_SERVER_START_ARGSNone在调用RabbitMQ服务器时使用的erl命令的额外参数。这不会覆盖RABBITMQ_SERVER_ERL_ARGS.
HOSTNAME
  • Unix, Linux: `env hostname`
  • MacOSX: `env hostname -s`
    5 T% \" @8 F" S$ \
当前机器名称
COMPUTERNAMEWindows: localhost当前机器名称, windows使用该变量
ERLANG_SERVICE_MANAGER_PATHWindows Service:  %ERLANG_HOME%\erts-x.x.x\binerlsrv.exe的路径, erlsrv.exe这个是erlang服务的包装脚本
rabbitmq.config详解(核心配置)
该配置文件使用的是Erlang标准配置文件,语法请参照这里
例:
  [    {rabbit, [{tcp_listeners, [5673]}]}  ].1 ]/ ]( ]) _: b5 o9 h3 T
$ f" P2 g  [' U# s( C, l/ r8 N
key描述
tcp_listeners监听AMQP连接的端口或主机/对。
: Q. p& \6 A9 r) Q/ N* q& ~
Default: [5672]
num_tcp_acceptorsErlang进程的数量,接受TCP监听器的连接数。
: u; y0 G. x0 f' F5 h3 n6 }  s8 k! j
Default: 10
handshake_timeout对AMQP 0-8/0-9/0-9-1握手的最大时间(在套接字连接和SSL握手之后),以毫秒为间隔* ?5 X2 m. \2 \3 p- g2 D' a9 L6 ^( ?% _
Default: 10000
ssl_listeners如上所述,用于SSL连接。
7 j& q# U* @  R- X" S+ n
Default: []
num_ssl_acceptors用于接受SSL监听连接的Erlang进程的数量。
; z/ H& X1 q" W" v$ s8 m/ L
Default: 1
ssl_optionsSSL配置参数. 详情请看 SSL documentation.
Default: []
ssl_handshake_timeoutSSL握手超时,以毫秒为间隔。( Y$ o; x: }6 L  v, f9 S' q9 |
Default: 5000
vm_memory_high_watermark触发流控制的内存阈值。详情请看 memory-based flow control.
Default: 0.4
vm_memory_high_watermark_paging_ratio设置当内存使用超过总内存百分比多少时,队列开始将消息持久化到磁盘以释放内存。 详情请看 memory-based flow control.
Default: 0.5
disk_free_limitRabbitMQ存储数据的分区的磁盘空间限制。当可用的磁盘空间低于这个限制时,就会触发流控制。值可以相对于RAM的总数设置(例如,内存比例,1.0)。该值也可以设置为整数的字节数。或者,单位(例如“50 mb”)。默认情况下,空闲磁盘空间必须超过50MB。详情请看 Disk Alarms.
Default: 50000000
log_levels控制日志的粒度。该值是一个日志事件类别和日志级别对的列表。
% k0 A. u2 c& ?: a
可设置级别:
  'none'
  'error'
  'warning'
  'info'
  'debug'
  以上下一层级别的日志输出均包含上层级别日志输出(如: warning包含warning和error), none为不输出日志
* Y& T6 K5 V' ]8 G
另外,当前未分类的事件总是记录在日志中
The categories are:
  • channel - 所有与AMQP通道有关的事件
  • connection - 对于所有与网络连接有关的事件
  • federation - 对于所有与federation有关的事件
  • mirroring - 对于与镜像队列相关的所有事件
    : s6 y3 `# R  M+ x* I& V! u# ^) b
    & n; O0 |8 Y0 R. ^9 I
Default: [{connection, info}]
frame_max
框架最大允许大小(以字节为单位)与消费者进行数据交换。设置为0意味着“无限”,但会在一些QPid客户端触发一个bug。
设置更大的值可能会提高吞吐量;
设置较小的值可能会提高延迟。
Default: 131072
channel_max
与消费者进行谈判的最大允许数量。设置为0意味着“无限”。
使用更多的通道会增加代理的内存占用。
Default: 0
channel_operation_timeout通道操作超时为毫秒(内部使用,由于消息传递协议的差异和限制而不直接暴露于客户机)。2 H& R: a* m4 r0 {3 @
Default: 15000
heartbeat
该值表示服务器在连接中发送的心跳延迟,在几秒钟内。优化框架。如果设置为0,则会禁用心跳。客户端可能不会遵循服务器的建议,请参阅AMQP参考以了解更多细节。
在有大量连接的情况下,禁用心跳可能改善性能,但可能会导致连接在关闭非活动连接的网络设备的出现。
Default: 60 (580 prior to release 3.5.5)
default_vhost当RabbitMQ创建一个新的数据库时,创建一个虚拟主机。交换amq.rabbitmq.logwill存在于这个虚拟主机中。
Default: <<"/">>
default_user当RabbitMQ从头创建一个新数据库时,要创建用户名。
9 s3 Q" Q% f  j$ f
Default: <<"guest">>
default_pass默认用户的密码。
2 }1 F5 R5 `  S& o1 ?4 y
Default: <<"guest">>
default_user_tags默认用户的标记。
! |. s$ y3 }& t& }7 Y. C
Default: [administrator]
default_permissions在创建时分配给默认用户的权限。$ B; F- U2 i/ Z- ]( v8 Y
Default:  [<<".*">>, <<".*">>, <<".*">>]
loopback_users
只允许通过环回接口连接到代理的用户列表(即localhost)。 如果您希望允许缺省的来宾用户远程连接,则需要将其更改为 [].
Default:  [<<"guest">>]
cluster_nodes当一个节点开始第一次启动时,将它设置为使集群自动发生。元组的第一个元素是节点试图集群到的节点。第二个元素是磁盘或ram,并确定节点类型。( P- ?! x4 y) _: ^$ O. d. p' j- y
Default: {[], disc}
server_properties键值对的列表,在连接上向客户端宣布。' Q' x& }* O7 g& |
Default: []
collect_statistics统计数据收集模式。主要与管理插件有关。选项有:" ~* D6 j  s$ X$ [3 x* x& `* `- i" P
  • none (不要发布统计数据)
  • coarse (发出每个队列/每个通道/每个连接统计信息)
  • fine (发出的每条数据)
    5 @2 X2 |1 H; A' {$ t1 g' I. z- X5 B
    ) S& z% |3 Q" q1 f. f7 P5 Z  N
通常情况下不需要设置该参数5 n& `6 i4 W5 G- R: X4 q* Q
Default: none
collect_statistics_interval统计数据收集间隔以毫秒为间隔。 主要相关插件 management plugin.
Default: 5000
management_db_cache_multiplier管理插件将缓存诸如队列清单之类的代价较高的查询的时间。缓存将把最后一个查询的运行时间乘以这个值,并在此时间内缓存结果。1 A0 M- e' x3 S, q5 c
Default: 5
auth_mechanismsSASL authentication mechanisms to offer to clients.
Default: ['PLAIN', 'AMQPLAIN']
auth_backends
Other databases than rabbit_auth_backend_internalare available through plugins.
Default: [rabbit_auth_backend_internal]
reverse_dns_lookups设置为true,让RabbitMQ对客户端连接执行反向DNS查找,并通过rabbitmqctl和管理插件呈现该信息。8 [( m6 N; y; n2 Z' k0 S
Default: false
delegate_count用于集群内部通信的委托进程的数量。当为多核CPU时可以考虑设置该值
/ E& |* ^! \3 ]8 n/ f/ |
Default: 16
trace_vhostsUsed internally by the tracer. 通常情况下不需要设置该参数
Default: []
tcp_listen_options默认的套接字选项。通常情况下不需要设置该参数& t3 I6 z) Y8 h! p  t
Default:
[{backlog,       128}, {nodelay,       true}, {linger,        {true,0}}, {exit_on_close, false}]                $ {2 U/ t! H( E' Z& Y4 k+ p
hipe_compile设置为true,使用HiPE预编译RabbitMQ的部分,这是Erlang的即时编译器。这将增加服务器的吞吐量,以增加启动时间的成本。# H* L% \" z, {0 Q
您可能会看到,在启动时延迟几分钟,您的性能会提高20-50%。这些数据是高度工作负载和硬件依赖的。
HiPE支持可能不会编译到您的Erlang安装中。如果不是这样,启用这个选项只会导致一个警告消息被显示,而启动将照常进行。例如,Debian/Ubuntu用户需要安装erlangbase-base-hipe包。
HiPE在某些平台上是不可用的,尤其是Windows。
HiPE在17.5之前就已经知道了erlangp/otp版本的问题。HiPE推荐使用最新的erlangp/otp版本
Default: false
cluster_partition_handling如何处理网络分区。可用模式:
" _9 f7 O9 s2 y
  • ignore
  • pause_minority
  • {pause_if_all_down, [nodes], ignore | autoheal}8 {* c" p/ c5 i! I0 b2 _. ^
    (例: ['rabbit@node1', 'rabbit@node2'])
  • autoheal: I; z6 |" f2 k6 I3 q

    # N- Z* V- H# z5 j( D7 M) S  y# _
详情请看documentation on partitions
/ r9 u5 s6 r& i, L/ |* ^. U
Default: ignore
cluster_keepalive_interval节点应该多频繁地将keepalive消息发送到其他节点(以毫秒为单位)。请注意,这与netticktime不一样; 错过的keepalive消息不会导致节点被认为挂机。- S. J. _$ P% Z8 A/ v6 e3 j
Default: 10000
queue_index_embed_msgs_below在消息的字节数中,消息将被直接嵌入到队列索引中。详情请看 persister tuning$ T, a4 Y# y: ?' p' N6 W
Default: 4096
msg_store_index_module用于队列索引的实现模块。 详情请看 persister tuning
0 `& ~- I" R, l/ n0 n3 K1 f) o
Default: rabbit_msg_store_ets_index
backing_queue_module队列内容的实现模块。通常情况下不需要设置该参数, s: u0 q! @& \  N
Default: rabbit_variable_queue
msg_store_file_size_limitTunable value for the persister.  通常情况下不需要设置该参数
Default: 16777216
mnesia_table_loading_retry_limit在等待集群中的Mnesia tables可用时,需要重试的次数。
" B! q) x3 N5 W1 X) o; I4 A! }
Default: 10
mnesia_table_loading_retry_timeout在集群中等待每个重试的时间,以便可用9 b" a9 [. `% Q0 b8 ~
Default: 30000
queue_index_max_ journal_entriesTunable value for the persister.  通常情况下不需要设置该参数
Default: 65536
queue_master_locator
Queue master定位策略
可用策略:
  • <<"min-masters">>
  • <<"client-local">>
  • <<"random">>
    2 _; }4 R3 G" M$ ?, ^$ w) y
    / @# i$ e8 p" G) @
详情请看 documentation on queue master location0 ?; h* F5 t! S+ p( L/ G- b
Default: <<"client-local">>
lazy_queue_explicit_gc_run_operation_threshold
调优: 只有在内存压力下有延迟队列时。
    这是触发垃圾收集器和其他内存减少活动的阈值。一个低的值可以降低性能,一个高的值可以提高性能,但是会导致更高的内存消耗。通常情况下不需要设置该参数
Default: 1000
queue_explicit_gc_run_operation_threshold
调优: 在内存压力较大时。
      这是触发垃圾收集器和其他内存减少活动的阈值。一个低的值可以降低性能,一个高的值可以提高性能,但是会导致更高的内存消耗。通常情况下不需要设置该参数
Default: 1000

' U) ^+ B: ~9 {

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2017-9-28 15:15:12 | 显示全部楼层
  {tcp_listen_options, [
4 o1 @& z  i7 ~: i6 S      binary,
$ j; X% J% L5 S0 x8 M$ ?& Z# B7 T      {packet, raw},/ c) r3 \" V1 m3 i
      {reuseaddr, true},$ h% T7 b" f: L- L3 U9 c
      {backlog, 256},. _; s5 S1 @8 u1 Q6 D+ R
      {nodelay, true},
( W9 {2 m( O. y% n      {sndbuf, 32768},
8 ]4 P: n5 B& ~      {recbuf, 32768},+ G7 C7 n' `4 B
      {exit_on_close, false},& X8 J9 [3 X/ B$ G, K8 q2 f
      {keepalive, true}
3 z( h" G, a$ z7 a" p    ]}6 x0 Y! J6 G0 r* @! ?3 Z
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 01:23 , Processed in 0.020589 second(s), 21 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表