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
Copied!
如果是上面这样的,只会取第一个点前面的单词。
[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,[]}]}]
Copied!
要指定节点名称,可以在 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)
Copied!
环境变量的使用方式是正常了,但是貌似不能随意指定。可能和版本有关系。
通过配置文件使用环境变量
下面演示通过配置文件的方式来使用环境变量
# 进入配置文件目录
[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)
# 能读取到,并且报错了,配置文件是生效的
Copied!
对于默认的取值规则,可以在 $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 路径
Copied!
先给出官方的配置文档:
下面总结一些常用的 RabbitMQ 变量,完成的变量还是去官方查找(笔者发现下面的某些变量在最新版本的官方文档中就已经不在了,还是需要去官方文档看才保险)
- RABBITMQ_NODE_PORT监听客户端链接的端口号。默认为 5672
- RABBITMQ_DIST_PORTRabbitMQ 节点内部通信端口,默认值为 RABBITMQ_NODE_PORT + 20000,即 25672,如果设置了 kernel.inet_dist_listen_min 或 kernel.inect_dist_listen_max 则此环境失效
- RABBITMQ_NODENAMERabbitMQ 节点名称,默认为 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_BASERABBITMQ_MNESIA_DIR 的父目录。除非明确设置了 RABBITMQ_MNESIA_DIR 目录,否则每个节点都应该配置这个环境变量默认值为:$RABBITMQ_HOME/var/lib/rabbitmq/mnesia对于 RabbitMQ 的操作用户来说,需要对当前目录可读、科协、可创建文件及子目录的权限
- RABBITMQ_MNESIA_DIR包含 RabbitMQ 服务节点的数据库、数据存储及集群状态等目录默认值为:$RABBITMQ_MNESIA_BASE/$RABBITMQ_NODENAME
- RABBITMQ_LOGSRabbitMQ 服务于 Erlang 相关的日志。默认值为 $RABBITMQ_LOG_BASE/$RABBITMQ_NODENAME.log`
- RABBITMQ_LOG_BASERabbitMQ 服务日志所在基础目录。默认值为 $RABBITMQ_HOME/var/log/rabbitmq
- RABBITMQ_SASL_LOGSRabbitMQ 服务与 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