# 环境变量
RabbitMQ 的环境变量都是以 RABBITMQ_
作为前缀,设置方式有如下两种:
Shell 环境中设置
在 Shell 中设置,不需要
RABBITMQ_
这个前缀;而且 优先级 shell 最高,也就是说,当 shell 和
rabbitmq-env.conf
同时设置了一个变量,则 shell 中的生效rabbitmq-env.conf
环境变量配置文件中设置默认路径在
$RABBITMQ_HOME/etc/rabbitmq/
目录下,可以在启动 RabbitMQ 服务时,指定RABBITMQ_CONF_ENV_FILE
变量来设置此文件的路径
# 启动时使用环境变量
当采用 rabbitmq-server -detached
方式启动 RabbitMQ 服务时,此服务节点默认以 rabbit@当前 Sheel 环境的 hostname)(主机名)
来命名。即 rabbit@$HOSTNAME
[root@study ~]# echo $HOSTNAME
study.centos.mrcode
[root@study ~]# hostname
study.centos.mrcode
2
3
4
如果是上面这样的,只会取第一个点前面的单词。
[root@study ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@study
[{nodes,[{disc,[rabbit@study]}]},
{running_nodes,[rabbit@study]},
{cluster_name,<<"rabbit@study">>},
{partitions,[]},
{alarms,[{rabbit@study,[]}]}]
2
3
4
5
6
7
要指定节点名称,可以在 rabbitmq-server
前添加变量来实现,如下所示
[root@study ~]# RABBITMQ_NODENAME=rabbit@study1 rabbitmq-server -detached
Warning: PID file not written; -detached was passed.
ERROR: epmd error for host study1: nxdomain (non-existing domain)
2
3
环境变量的使用方式是正常了,但是貌似不能随意指定。可能和版本有关系。
# 通过配置文件使用环境变量
下面演示通过配置文件的方式来使用环境变量
# 进入配置文件目录
[root@study ~]# cd /opt/rabbitmq/etc/rabbitmq/
# 发现没有环境配置文件
[root@study rabbitmq]# ll
总用量 4
-rw-r--r--. 1 root root 23 6月 29 05:03 enabled_plugins
# 我们新建这个文件
[root@study rabbitmq]# vim rabbitmq-env.conf
# 然后写一个 nodename 的变量
NODENAME=rabbit@node1
# 再启动看看该文件是否有生效,根据之前的测试,会读取到这个变量,并且会报错
[root@study rabbitmq]# rabbitmq-server -detached
Warning: PID file not written; -detached was passed.
ERROR: epmd error for host node1: nxdomain (non-existing domain)
# 能读取到,并且报错了,配置文件是生效的
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
对于默认的取值规则,可以在 $RABBITMQ_HOME/sbin/rabbitmq-defaults
文件中查看
[root@study sbin]# cat /opt/rabbitmq/sbin/rabbitmq-defaults
#!/bin/sh -e
### next line potentially updated in package install steps
SYS_PREFIX=${RABBITMQ_HOME}
### next line will be updated when generating a standalone release
ERL_DIR=
CLEAN_BOOT_FILE=start_clean
SASL_BOOT_FILE=start_sasl
if [ -f "${RABBITMQ_HOME}/erlang.mk" ]; then
# RabbitMQ is executed from its source directory. The plugins
# directory and ERL_LIBS are tuned based on this.
RABBITMQ_DEV_ENV=1
fi
## Set default values
BOOT_MODULE="rabbit"
CONFIG_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq
LOG_BASE=${SYS_PREFIX}/var/log/rabbitmq
MNESIA_BASE=${SYS_PREFIX}/var/lib/rabbitmq/mnesia
ENABLED_PLUGINS_FILE=${SYS_PREFIX}/etc/rabbitmq/enabled_plugins
PLUGINS_DIR="${RABBITMQ_HOME}/plugins"
# RABBIT_HOME can contain a version number, so default plugins
# directory can be hard to find if we want to package some plugin
# separately. When RABBITMQ_HOME points to a standard location where
# it's usually being installed by package managers, we add
# "/usr/lib/rabbitmq/plugins" to plugin search path.
case "$RABBITMQ_HOME" in
/usr/lib/rabbitmq/*)
PLUGINS_DIR="/usr/lib/rabbitmq/plugins:$PLUGINS_DIR"
;;
esac
CONF_ENV_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq-env.conf
# 可以看到在这里引用了 rabbitmq-env.conf 路径
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
先给出官方的配置文档:
下面总结一些常用的 RabbitMQ 变量,完成的变量还是去官方查找(笔者发现下面的某些变量在最新版本的官方文档中就已经不在了,还是需要去官方文档看才保险)
RABBITMQ_NODE_PORT
监听客户端链接的端口号。
默认为 5672
RABBITMQ_DIST_PORT
RabbitMQ 节点内部通信端口,默认值为 RABBITMQ_NODE_PORT + 20000,即 25672,如果设置了 kernel.inet_dist_listen_min 或 kernel.inect_dist_listen_max 则此环境失效
RABBITMQ_NODENAME
RabbitMQ 节点名称,默认为
rabbit@$HOSTNAME
,在每个 Erlang 节点和集群的组合中,节点名称必须唯一RABBITMQ_CONF_ENV_FILE
环境变量配置文件地址,指定文件
rabbitmq-env.conf
的地址。默认值为
#RABBITMQ_HOME/etc/rabbitmq/rabbitmq-env.conf
RABBITMQ_USE_LONGNAME
使用长名称命名,如果当前的 hostname 为 node1.longname,那么默认情况下创建的节点名为 rabbit@node1。
将此参数设置为 true 时,创建的节点名称为 rabbit@node1.longname
RABBITMQ_CONFIG_FILE
配置文件路径。
默认值为
$RABBITMQ_HOME/etc/rabbitmq/rabbitmq
,注意,该文件没文件后缀RABBITMQ_MNESIA_BASE
RABBITMQ_MNESIA_DIR 的父目录。除非明确设置了 RABBITMQ_MNESIA_DIR 目录,否则每个节点都应该配置这个环境变量
默认值为:
$RABBITMQ_HOME/var/lib/rabbitmq/mnesia
对于 RabbitMQ 的操作用户来说,需要对当前目录可读、科协、可创建文件及子目录的权限
RABBITMQ_MNESIA_DIR
包含 RabbitMQ 服务节点的数据库、数据存储及集群状态等目录
默认值为:
$RABBITMQ_MNESIA_BASE/$RABBITMQ_NODENAME
RABBITMQ_LOGS
RabbitMQ 服务于 Erlang 相关的日志。
默认值为
$RABBITMQ_LOG_BASE/$RABBITMQ_NODENAME
.log`RABBITMQ_LOG_BASE
RabbitMQ 服务日志所在基础目录。
默认值为
$RABBITMQ_HOME/var/log/rabbitmq
RABBITMQ_SASL_LOGS
RabbitMQ 服务与 Erlang 的 SASL(System Application Support Libraries)相关的日志。
默认值为
$RABBITMQ_LOG_BASE/$RABBITMQ_NODENAME-sasl.log
RABBITMQ_PLUGINS_DIR
插件所在路径。
默认值为
$RABBITMQ_LOG_BASE/plugins
如果没有特殊需求,不建议更改 RabbitMQ 环境变量。在生产环境中,对于配置和日志有特殊的管理目录,那么可以参考以下相应的配置:
# 配置文件地址
CONFIG_FILE=/apps/conf/rabbitmq/rabbitmq
# 环境变量的配置文件地址
CONF_ENV_FILE=/apps/conf/rabbitmq/rabbitmq-env.conf
# 服务日志地址
LOG_BASE=/apps/logs/rabbitmq
# mnesia 路径
MNESIA_BASE=/app/dbdat/rabbitmq/mnesia
2
3
4
5
6
7
8
9
← RabbitMq 实战指南 配置文件 →