跳到主要内容

RabbitMQ 基础核心配置文件介绍

1. 前言

Hello,大家好。今天会为同学们介绍 RabbitMQ 中的基础核心配置文件。这些基础核心配置文件是保证我们的 RabbitMQ 服务正常运行的基础,如果我们没有根据实际情况去配置这些文件,那么我们的 RabbitMQ 服务可能就不会按照我们计划的那样去运行,也就不能达到我们预期的结果。

理解并掌握 RabbitMQ 基础核心配置文件的配置方法,以及基础核心配置属性,是灵活配置和应用 RabbitMQ 服务的前提,我们只有掌握了 RabbitMQ 的配置手段之后,我们才能在不同场景去应用 RabbitMQ 。

本节主要内容:

  • RabbitMQ 环境相关配置文件及参数;
  • RabbitMQ 基础配置文件及参数;
  • RabbitMQ 额外配置文件及参数。

2. RabbitMQ 环境相关配置文件及参数

2.1 文件定义与路径

RabbitMQ 的环境配置文件,主要是用来对 RabbitMQ 服务所运行的环境进行配置,该配置文件根据所处的平台设置了不同的文件名称,在 Windows 平台中,该配置文件被称为 rabbitmq-env-conf.bat ,在 Centos 平台中,该配置文件被称为 rabbitmq-env.conf 。

如果同学们在安装 RabbitMQ 服务时,均采用了默认安装的方式,那么在 Windows 平台中,rabbitmq-env-conf.bat 配置文件的所在目录就位于 RabbitMQ 服务的安装目录下的 sbin 目录中;在 Centos 平台中,rabbitmq-env.conf 配置文件的所在目录就位于 /usr/lib/rabbitmq/bin 目录下。 如果大家在安装 RabbitMQ 服务时,采用了自定义安装的方式,那么请到各自对应的目录下去寻找该配置文件。

Tips: 本着简洁明了的原则,本节所介绍的 RabbitMQ 配置文件均以 Centos 平台下的为例,这和 Windows 平台大同小异,并没有其他的特殊之处。

2.2 核心配置属性介绍

RABBITMQ_NODE_IP_ADDRESS 属性

RABBITMQ_NODE_IP_ADDRESS 属性是用来描述可访问 RabbitMQ 服务的主机地址,具体到我们的工作当中,就是允许哪些应用程序访问我们的 RabbitMQ 服务。

该属性默认值为空字符串,表示任何应用程序都可以访问我们的 RabbitMQ 服务。那么,如果我们只允许一个应用程序来访问我们的 RabbitMQ 服务,我们应该怎么来配置呢?如下代码所示:

// 假定我们的应用程序所在地址为 192.165.22.123
RABBITMQ_NODE_IP_ADDRESS="192.165.22.123"

通过上述代码,我们可以知道,如果我们想指定应用程序访问我们的 RabbitMQ 服务,那么我们只需要将我们应用程序所在地址作为字符串的形式,来发赋给 RABBITMQ_NODE_IP_ADDRESS 属性即可。

RABBITMQ_NODE_PORT 属性

RABBITMQ_NODE_PORT 属性是用来描述 RabbitMQ 服务所使用的网络端口,即 RabbitMQ 服务在服务器上所绑定的服务端口。

该属性默认值为 5672 ,即 RabbitMQ 服务默认使用 5672 端口。如果我们想改变 RabbitMQ 服务所绑定的端口,我们只需要按照上述属性的设置步骤即可,如下代码所示:

// 假定我们需要将 RabbitMQ 的服务绑定到 6672 端口上
RABBITMQ_NODE_PORT="6672"

RABBITMQ_NODENAME 属性

RABBITMQ_NODENAME 属性是用来描述 RabbitMQ 服务当前所在节点的名称。

该属性的默认值是根据不同操作系统来定义的,在 Windows 系统中,RABBITMQ_NODENAME 属性的默认值为 rabbit@%COMPUTERNAME% ,即我们电脑的名称;在 Centos 系统中,RABBITMQ_NODENAME 属性的默认值为 rabbit@$HOSTNAME ,即我们主机的名称。

同样地,如果我们想自定义 RabbitMQ 服务的节点名称,我们可以这样来做:

// 假定我们需要将当前 RabbitMQ 服务所在节点的名称修改为 rabbitmq-server-one
RABBITMQ_NODENAME="rabbitmq-server-one"

Tips: 一般来说,如果我们的 RabbitMQ 服务只有一个节点,是不会修改 RabbitMQ 的服务名称的,如果我们的 RabbitMQ 服务存在多个节点,即 2个及 2 个以上节点时,我们需要根据每个 RabbitMQ 所起到的服务来为不同的 RabbitMQ 节点设置服务名称。

RABBITMQ_USE_LONGNAME 属性

RABBITMQ_USE_LONGNAME 属性是是否启用 RabbitMQ 全量名称的开关,当我们开启后,我们每个 RabbitMQ 节点的名称以及其他可命名的地方都会采用完整名称规则的方式来进行命名。

该属性的默认值为 false ,即不使用 RabbitMQ 全量名称规则来命名,只是用默认的正常规则来进行命名,如果我们需要打开 RabbitMQ 全量命名,我们可以这样打开:

RABBITMQ_USE_LONGNAME=true

Tips: 在实际工作中,很少会使用 RabbitMQ 的全量命名规则,因为这种命名策略生成的名称非常长,且不易读,不利于我们对 RabbitMQ 服务节点的维护,当然,如果我们必须要使用这种命名规则,也是无可厚非的。

RABBITMQ_SERVICENAME 属性

RABBITMQ_SERVICENAME 属性用来描述 RabbitMQ 服务的服务名称。

该属性只对 Windows 系统起作用,其默认值为 RabbitMQ ,在 Centos 系统中,RabbitMQ 的服务名称不可修改,统一被命名为 rabbitmq-server.service 。

那么,在 Windows 系统中,如果我们想修改 RabbitMQ 的服务名称,我们只需要找到 services.msc 文件,并以文本文档的类型打开它,在里面找到 RABBITMQ_SERVICENAME 属性,将它的值修改成我们想要的名称即可,如下代码所示:

// 假定我们需要修改服务名称为 rabbitmq-server
RABBITMQ_SERVICENAME="rabbitmq-server"

RABBITMQ_CONSOLE_LOG 属性

RABBITMQ_CONSOLE_LOG 属性用来规定 RabbitMQ 服务所生成的服务日志的路径,如果没有设置该属性,则 RabbitMQ 不会生成任何服务日志。

该属性的默认值为空,即默认没有规定 RabbitMQ 服务日志的生成位置。

如果我们想指定 RabbitMQ 服务所生成的位置,我们只需要将路径赋值给 RABBITMQ_CONSOLE_LOG 属性即可,如下代码所示:

RABBITMQ_CONSOLE_LOG=/usr/temp/rabbtmq-log/one.log

RABBITMQ_DIST_PORT 属性

RABBITMQ_DIST_PORT 属性用来描述 RabbitMQ 服务节点间进行通信的端口号。

该属性的默认值为 RABBITMQ_NODE_PORT + 20000 。

修改方式如下代码所示:

// 假定我们需要修改端口号为 RABBITMQ\_NODE\_PORT + 20001
RABBITMQ_DIST_PORT=RABBITMQ_NODE_PORT + 20001

Tips: 1. 在实际工作中,一般不会刻意去修改 RabbitMQ 服务节点间进行通信的端口号,除非我们的应用程序所绑定的端口与该端口发生了冲突。
2. 修改 RabbitMQ 服务节点间通信端口号我们可以采用一种自增的原则,即我们不要修改 RABBITMQ_NODE_PORT ,我们修改的是后面的 20000 ,将 20000 进行一次累加即可。
3.rabbitmq-env.conf 文件中的所有属性在发生变化之后,都需要重启我们的 RabbitMQ 服务才能生效。

3. RabbitMQ 基础配置文件及参数

3.1 文件定义与路径

RabbitMQ 基础配置文件主要用来对 RabbitMQ 服务本身做一些配置,从而来满足我们的业务需求。同样地,该配置文件也是根据不同的操作系统来进行命名的,在 Windows 系统中,该配置文件被称为 rabbitmq-conf.bat , 在 Centos 系统中,该配置文件被称为 rabbitmq.conf 。

在 Centos 系统中,该配置文件默认的路径为 /etc/rabbitmq/ ,在 Windows 系统中,该配置文件默认的路径为 %APPDATA%\RabbitMQ ,其中,APPDATA 指的是 RabbitMQ 中数据文件所在的路径。

3.2 核心配置属性介绍

listeners 属性

listeners 属性是 AMQP 协议用来监听 tcp 端口的监听器,完整属性名称为 listeners.tcp.default 。

该属性的默认值为 5672 ,即 AMQP 协议默认监听 5672 端口。

修改方式同上,这里不再赘述。

log.file.level 属性

log.file.level 属性用来定义 RabbitMQ 服务日志的打印级别,一共有 4 种日志打印级别,分别是 error 、warning 、info 、debug,这四种日志级别根据这个顺序互相包含,即 debug 级别的日志会打印出 error 、warning、info、debug 的所有数据。

该属性默认值为 info ,即默认的服务日志打印级别为 info 级别,会打印包括 error 、warning 、info 的所有数据。

修改方式同上,这里不再赘述。

channel_max & channel_operation_timeout 属性

channel_max 属性是用来规定具体的一个频道与客户端的最大连接数量,该数量的默认值为 2047 。

channel_operation_timeout 属性是用来规定获取具体的一个频道连接的最大超时时间,该时间默认值为 15000 毫秒。

修改方式同上,这里不再赘述。

max_message_size & heartbeat & default_vhost 属性

max_message_size 属性用来规定一条消息的最大占用空间,该属性的单位为比特,默认值为 134217728 ,最大值为 536870912 。

heartbeat 属性用来规定 RabbitMQ 服务中心跳检测的超时时间,如果该属性的值设置为 0 ,则 RabbitMQ 服务的心跳检测机制会自动关闭,该属性的默认值为 60 秒。

default_vhost 属性用来规定 RabbitMQ 服务中默认的虚拟主机名称,默认值为 / 。

修改方式同上,这里不再赘述。

default_user & default_pass & default_user_tags & default_permissions 属性

default_user 属性和 default_pass 属性分别用来规定 RabbitMQ 服务中默认的用户名和密码,默认值均为 guest 。

default_user_tags 属性用来对用户的角色进行设置,默认值为 administrator,即默认用户为 RabbitMQ 服务的超级管理员,如下代码所示:

default_user_tags.administrator = true

default_permissions 属性用来规定用户的默认权限,默认值为所有用户都可以对 RabbitMQ 进行配置,以及读写操作。

如果我们想修改用户的权限,那么我们需要这样进行修改:

default_permissions.configure = .*
default_permissions.read = .*
default_permissions.write = .*

上述代码中,configure 用来设置是否允许用户对 RabbitMQ 进行配置,read 用来设置用户的读权限,write 用来设置用户的写权限。

cluster_formation.classic_config.nodes 属性

cluster_formation.classic_config.nodes 属性用来设置不同 RabbitMQ 服务节点间连接,该属性会作为一个列表生效,即该列表中的所有 RabbitMQ 服务节点在 RabbitMQ 服务启动时都将被启动,且各节点间的通信通道将被打开。

那么该如何定义我们所需要的节点呢?如下代码所示:

// 假定我们有两个服务节点需要通信
cluster_formation.classic_config.nodes.1 = rabbit@hostname1
cluster_formation.classic_config.nodes.2 = rabbit@hostname2

Tips: 1. rabbitmq.conf 文件中的所有属性,一经修改,需要重启 RabbitMQ 服务才可生效。
2. 出于不同的安装方式,rabbitmq.conf 配置文件可能有的安装方式不会自动生成,如果需要,我们可以在上述指定目录新建一个 rabbitmq.conf 文件,并重启 RabbitMQ 服务。

4. RabbitMQ 额外配置文件

文件介绍

通过对上述 RabbitMQ 环境配置文件以及 RabbitMQ 基础配置文件及其中的核心属性的介绍,我们已经将 RabbitMQ 中的所有核心配置项全部介绍完毕了,这些核心配置项基本可以满足我们自定义 RabbitMQ 98% 的需求的需要。

RabbitMQ 额外配置文件是对上述 RabbitMQ 基础配置文件的补充,当我们对这个额外配置文件做了自定义配置之后,那么我们所配置的内容会和 RabbitMQ 基础配置文件相合并,但是这个额外配置文件是通过 erlang 语言的语法来配置的,如果我们想自定义该配置文件的话,还需要我们对 erlang 语言有所了解。

出于本套课程的初衷考虑,本节不会对 RabbitMQ 额外配置文件做进一步的介绍,我们只需要了解 RabbitMQ 配置文件中存在这么一个额外的配置文件即可,这个配置文件在实际工作中几乎是不使用的。

RabbitMQ 额外配置文件只存在于 Centos 系统中,文件名称默认为 advanced.config 。在 Centos 系统中,该文件位于 /etc/rabbitmq 路径下;在 Windows 系统中,该文件位于 %APPDATA%\RabbitMQ 路径下,其中,APPDATA 指的是 RabbitMQ 中数据文件的所在位置。

5. 小结

本小节主要对 RabbitMQ 中的配置文件,及其配置文件属性做了详细介绍。针对基础核心配置文件,例如,RabbitMQ 环境配置文件和 RabbitMQ 基础配置文件,对这些配置文件中的各个核心配置属性都做了详细介绍,对于不需要各位同学掌握的 RabbitMQ 额外配置文件 advanced.config ,各位同学只需要知道它的作用即可。