Fork me on GitHub
余鸢

Configuring RabbitMQ

在* nix系统上配置RabbitMQ

配置环境

RabbitMQ在/etc/rabbitmq/rabbitmq-env.conf中查找一组环境变量。 如果不存在,则采用默认值。 rabbitmq-env.conf中的所有值都将导出到RabbitMQ服务器以RABBITMQ_前缀运行的环境中; 此前缀不包括在配置文件中。 可以设置以下变量(在key = value语法中):

NODENAME:设置RabbitMQ节点的名称。

CONFIG_FILE:设置RabbitMQ配置文件的位置(不是此环境文件)

NODE_IP_ADDRESS:设置要侦听的特定IP地址。

NODE_PORT:设置要侦听的端口

DIST_PORT:设置侦听的端口进行群集

USE_LONGNAME:指示是否使用完全限定名称来标识节点的布尔值。 在具有相同短名称的环境中有用。

CTL_ERL_ARGS:设置运行rabbitmqctl时调用的erl命令的参数。 用于调试。

SERVER_ERL_ARGS:设置启动RabbitMQ时调用的erl命令的参数。 设置此值将覆盖默认值(请参阅下面的示例配置)。

SERVER_ADDITIONAL_ERL_ARGS:为启动RabbitMQ时调用的erl命令设置其他参数。 设置此值将附加到SERVER_ERL_ARGS变量,默认情况下为空。

SERVER_START_ARGS:也为在启动RabbitMQ时调用的erl命令设置。

示例配置文件(所有值实际上都是默认值):

1
2
3
4
5
6
7
8
9
10
NODENAME=rabbit@localhost
CONFIG_FILE=/etc/rabbitmq/rabbitmq.config
NODE_IP_ADDRESS=""
NODE_PORT=5672
DIST_PORT=25672
USE_LONGNAME=false
CTL_ERL_ARGS=""
SERVER_ERL_ARGS="+K true +A30 +P 1048576 -kernel inet_default_connect_options [{nodelay,true}]"
SERVER_ADDITIONAL_ERL_ARGS=""
SERVER_START_ARGS=""

配置RabbitMQ

注意:RabbitMQ的配置文件是标准的Erlang配置语法。 如果你不熟悉Erlang,这可能会令人头疼。 它遵循以下格式:

1
2
3
4
5
6
7
8
9
10
11
[
{rabbit,
[
{config_value_1, []},
{config_value_2, []}
]
},
{additional_rabbitmq_plugins,
[...]
}
]

RabbitMQ的配置部分有以下keys (摘自https://www.rabbitmq.com/configure.html):

  • tcp_listeners:要侦听AMQP连接(不使用SSL)的端口列表。 可以包含整数(意为“侦听所有接口”)或元组(如{“127.0.0.1”,5672})以监听一个或多个接口。

    默认值:[5672]

  • num_tcp_acceptors:将接受TCP侦听器连接的Erlang进程数。

    默认值:10

  • handshake_timeout:AMQP 0-8 / 0-9 / 0-9-1握手(套接字连接和SSL握手后)的最长时间,以毫秒为单位。

    默认值:10000

  • ssl_listeners:如上,用于SSL连接。

    默认值:[]

  • num_ssl_acceptors:将接受SSL侦听器连接的Erlang进程数。

    默认值:1

  • ssl_options:SSL配置。

    默认值:[]

  • ssl_handshake_timeout:SSL握手超时,以毫秒为单位。

    默认值:5000

  • vm_memory_high_watermark:触发流量控制的内存阈值。 请参阅基于内存的流控制文档。

    默认值:0.4

  • vm_memory_high_watermark_paging_ratio:队列开始将消息页面输出到磁盘以释放内存的高水位限制的分数。 请参阅基于内存的流控制文档。

    默认值:0.5

  • disk_free_limit:RabbitMQ用于存储数据的分区的磁盘可用空间限制。 当可用磁盘空间低于此限制时,触发流量控制。 该值可以相对于RAM的总量(例如{mem_relative,1.0})来设置。 该值也可以设置为整数字节。 或者,在信息单元(例如“50MB”)中。 默认情况下,可用磁盘空间必须超过50MB。 请参见Disk Alarms文档。

    默认值:50000000

  • log_levels:控制日志记录的粒度。 该值是日志事件类别和日志级别对的列表。

    级别可以是none(无事件记录),error(仅记录错误),warning(仅记录错误和警告),info(错误,警告和信息性消息被记录)或debug(错误,警告 ,信息消息和调试消息被记录)。

    目前定义有四类。另外,目前其他类别的,events总是记录。

    类别:

    • channel - 所有与AMQP通道相关的事件
    • connection - 用于所有与网络连接相关的事件
    • federation - 所有与联盟有关的事件
    • mirroring - 所有与镜像队列相关的事件

    默认: [{connection, info}]

  • frame_max:与客户端协商的帧的最大允许大小(以字节为单位)。 设置为0意味着“无限制”,但会在一些QPid客户端触发一个错误。 设置较大的值可以提高吞吐量; 设置较小的值可以改善等待时间。

    默认值:131072

  • channel_max:与客户端协商的最大允许通道数。 设置为0表示“无限制”。 使用更多的通道增加了代理的内存占用。

    默认值:0

  • channel_operation_timeout:通道操作超时(以毫秒为单位)(由于消息传递协议差异和限制,内部使用,不直接暴露给客户端)。

    默认值:15000

  • heartbeat:表示服务器在connection.tune帧中发送的heartbeat 延迟(以秒为单位)的值。 如果设置为0,心跳将被禁用。 客户端可能不遵循服务器建议,有关详细信息,请参阅AMQP参考。 禁用检测信号可能会提高具有大量连接的情况下的性能,但可能会导致在关闭非活动连接的网络设备存在时连接断开。

    默认值:60(版本3.5.5之前的580

  • default_vhost:当RabbitMQ从头开始创建新数据库时要创建的虚拟主机。 交换amq.rabbitmq.log将存在于此虚拟主机中。

    默认值:<<“/”>>

  • default_user:当RabbitMQ从头开始创建新数据库时要创建的用户名。

    默认值:<<“guest”>>

  • default_pass:默认用户的密码。

    默认值:<<“guest”>>

  • default_user_tags:默认用户的标签。

    默认值:[administrator]

  • default_permissions:在创建默认用户时分配给它的权限。

    默认值:[<<".*">>, <<".*">>, <<".*">>]

  • loopback_users:只允许通过回送接口(即localhost)连接到代理的用户列表。

    如果你希望允许默认的访客用户远程连接,您需要将其更改为[]

    默认值:[<<“guest”>>]

  • cluster_nodes:设置此选项,以便在节点第一次启动时自动执行群集。 元组的第一个元素是节点将尝试集群到的节点。 第二个元素是disc或ram并确定节点类型。

    默认值: {[], disc}

  • server_properties:在连接时向客户端通知的键值对列表。

  • 默认值:[]

  • collect_statistics:统计信息收集模式。 主要与管理插件相关。 选项包括:

    • none(不发出统计信息事件)
    • coarse(每队列发射/每通道/每连接统计)
    • fine(也发射每消息统计)

    你可能不想自己改变这个。

    默认值:none

  • collect_statistics_interval:统计信息收集间隔(以毫秒为单位)。 主要与管理插件相关。

    默认值:5000

  • auth_mechanisms:向客户端提供的SASL认证机制。

    默认值:['PLAIN','AMQPLAIN']

  • auth_backends:要使用的身份验证/授权后端列表。 该列表可以包含模块的名称(在这种情况下,相同的模块用于认证和授权)或2元组,如{ModN,ModZ},在这种情况下,ModN用于认证,ModZ用于授权。

  • 在2-tuple情况下,ModZ可以由列表替换,其中所有元素必须确认每个授权查询,例如, {ModN,[ModZ1,ModZ2]}。 这允许授权插件混合并提供额外的安全限制。

    除了rabbit_auth_backend_internal之外的其他数据库可通过插件使用。

    默认值:[rabbit_auth_backend_internal]

  • reverse_dns_lookups:设置为true以使RabbitMQ在客户端连接上执行反向DNS查找,并通过rabbitmqctl和管理插件提供该信息。

    默认值:false

  • delegate_count:用于集群内通信的委派进程数。 在具有大量核心并且也是集群的一部分的机器上,您可能希望增加此值。

    默认值:16

  • trace_vhosts:跟踪器在内部使用。 你不应该改变这个。

    默认值:[]

  • tcp_listen_options:默认套接字选项。 你可能不想改变这个。

    默认:

1
2
3
[{backlog, 128},
{nodelay, true},
{exit_on_close, false}]
  • hipe_compile:设置为true以使用HiPE预先编译RabbitMQ的部分,HiPE是Erlang的即时编译器。 这将以增加启动时间为代价增加服务器吞吐量。

    您可能会看到20-50%的性能提高,但是在启动时延迟几分钟。 这些数字是高度工作负载和硬件相关的。

    HiPE支持可能不会编译到您的Erlang安装。 如果不是,启用此选项将仅显示警告消息,并且启动将正常进行。 例如,Debian / Ubuntu用户需要安装erlang-base-hipe包。

    HiPE在某些平台上不可用,尤其包括Windows。

    HiPE在17.5之前的Erlang / OTP版本中存在已知问题。 强烈建议对HiPE使用最近的Erlang / OTP版本。

    默认值:false

  • cluster_partition_handling:如何处理网络分区。 可用模式有:

    • ignore
    • pause_minority
    • {pause_if_all_down,[nodes], ignore| autoheal}其中[nodes]是节点名称列表(例如:['rabbit @ node1','rabbit @ node2']
    • autoheal

    有关更多信息,请参阅分区文档。

    默认值:ignore

  • cluster_keepalive_interval:节点应如何频繁地向其他节点发送keepalive消息(以毫秒为单位)。 注意这和net_ticktime不一样; 错过保持活动消息不会导致节点被视为失败。

    默认:10000

  • queue_index_embed_msgs_below:消息以字节为单位的大小,在该消息之下,消息将直接嵌入队列索引中。 建议您在更改之前阅读持久性调优文档。

    默认值:4096

  • msg_store_index_module:用于队列索引的实现模块。 建议您在更改之前阅读持久性调优文档。

    默认值:rabbit_msg_store_ets_index

  • backing_queue_module:队列内容的实现模块。 你可能不想改变这个。

    默认值:rabbit_variable_queue

  • msg_store_file_size_limit:持久性的可调参数值。 你几乎肯定不应该改变这个。

    默认值:16777216

  • mnesia_table_loading_timeout:等待群集中的Mnesia表变为可用时使用的超时。

    默认值:30000

  • queue_index_max_journal_entries:持久性的可调参数值。 你几乎肯定不应该改变这个。

    默认值:65536

  • queue_master_locator:队列主机位置策略。 可用的策略有:

    • <<“min-masters”>>
    • <<“client-local”>>
    • <<“random”>>

    有关详细信息,请参阅队列主机位置的文档。

    默认值:<<“client-local”>>