RabbitMQ安装
RabbitMQ是一个实现了AMQP(Advanced Message Queuing Protocol)高级消息队列协议的消息队列服务,用Erlang语言。
1 源码安装
RabbitMQ是由Erlang语言开发,所以需要先安装Erlang环境
1.1 安装 Erlang
安装依赖
# Centos
yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmlto
# Ubuntu
apt -y install libssl-dev ncurses-dev在安装 RabbitMQ 之前,您必须安装Erlang/OTP支持的版本。标准红帽、Fedora、CentOS 存储库提供的 Erlang 版本通常过时,不能用于运行最新的 RabbitMQ 版本。
根据官网资料可知,CentOS7支持不了Erlang 24,所以如果是CentOS7安装的版本需要小于24。

wget https://github.com/erlang/otp/releases/download/OTP-24.2.1/otp_src_24.2.1.tar.gz
wget https://erlang.org/download/otp_src_24.2.tar.gz解压编译安装
--without-javac禁用java编译器
# 解压
tar -zxf otp_src_24.2.1.tar.gz
# 配置安装路径编译代码
cd otp_src_24.2.1/
./configure --prefix=/usr/local/erlang --without-javac
make && make install配置环境变量
vi /etc/profile
# 添加下面的配置
# set erlang environment
ERLANG_HOME=/usr/local/erlang
export PATH=${PATH}:${ERLANG_HOME}/bin
# 使配置文件生效
source /etc/profile1.1.1 测试
测试erlang是否安装成功,执行erl进行简单计算测试
# erl
Erlang/OTP 24 [erts-12.2.1] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1]
Eshell V12.2.1 (abort with ^G)
1> 1+2.
3
2> halt().1.2 创建系统用户和组
我们创建一个名为 rabbitmq 的系统用户,这种用户默认不允许直接登录,安全性更高。
# 创建用户组
groupadd rabbitmq
# 创建用户并加入组,禁止其 shell 登录
useradd -r -g rabbitmq -m -s /sbin/nologin rabbitmq1.3 统一授权
现在你需要确保 安装目录 和 数据目录 都能被这个新用户访问。
# 授权安装目录(假设在 /usr/local/rabbitmq)
chown -R rabbitmq:rabbitmq /usr/local/rabbitmq
# 授权数据和日志目录
# 注意:即使目录还没创建,也可以先创建再授权
mkdir -p /data/rabbitmq/mnesia /data/rabbitmq/log
chown -R rabbitmq:rabbitmq /data/rabbitmq
chmod -R 755 /data/rabbitmq1.4 安装 RabbitMQ
1.4.1 下载 rabbitmq
# 二进制包
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.14/rabbitmq-server-generic-unix-3.7.14.tar.xz
tar -xf rabbitmq-server-generic-unix-3.7.14.tar.xz
mv rabbitmq_server-3.7.14 /usr/local/rabbitmq1.4.2 修改配置
创建/编辑配置文件
前往你的安装目录(例如/usr/local/rabbitmq/etc/rabbitmq/),创建rabbitmq-env.conf:
vi /usr/local/rabbitmq/etc/rabbitmq/rabbitmq-env.conf添加路径配置
在文件中写入以下内容(替换为你实际的路径):
# 指定 Mnesia 数据库根目录
RABBITMQ_MNESIA_BASE=/data/rabbitmq/mnesia
# 指定日志根目录
RABBITMQ_LOG_BASE=/data/rabbitmq/log1.4.3 配置环境变量
vi /etc/profile
# 添加以下配置
# set rabbitmq environment
RABBIT_HOME=/usr/local/rabbitmq
export PATH=${PATH}:${RABBIT_HOME}/sbin
# 使得文件生效
source /etc/profile1.5 启动 RabbitMQ 服务
rabbitmq-server -detached查看服务状态
rabbitmqctl status显示如下信息,说明已经启动

停止RabbitMQ
rabbitmqctl stop1.6 创建 Service 文件管理服务
创建文件
vi /etc/systemd/system/rabbitmq.service写入配置内容
将以下内容粘贴进去(请根据你的实际 安装路径 和 运行用户 进行微调):
[Unit]
Description=RabbitMQ Broker
After=network.target
[Service]
Type=notify
User=rabbitmq
Group=rabbitmq
WorkingDirectory=/usr/local/rabbitmq
# 将 Erlang 的 bin 目录加入 PATH
Environment="PATH=/usr/local/erlang/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Environment=RABBITMQ_HOME=/usr/local/rabbitmq
Environment=RABBITMQ_MNESIA_BASE=/data/rabbitmq/mnesia
Environment=RABBITMQ_LOG_BASE=/data/rabbitmq/log
ExecStart=/usr/local/rabbitmq/sbin/rabbitmq-server
ExecStop=/usr/local/rabbitmq/sbin/rabbitmqctl stop
ExecReload=/usr/local/rabbitmq/sbin/rabbitmqctl stop_app ; /usr/local/rabbitmq/sbin/rabbitmqctl start_app
Restart=on-failure
RestartSec=10
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
LimitNOFILE: RabbitMQ 是 IO 密集型应用,默认的句柄限制(通常 1024)在高并发下会报错,脚本中将其设为 65536 是生产环境的常规做法。脚本中的
Environment变量会覆盖rabbitmq-env.conf中的同名配置。为了维护方便,建议统一只在一个地方(脚本或配置文件)定义路径。
1.7 启动服务
执行以下命令让系统识别新服务并启动:
- 重载 Systemd 管理器:
systemctl daemon-reload - 设置开机自启:
systemctl enable rabbitmq - 立即启动服务:
systemctl start rabbitmq - 检查状态:
systemctl status rabbitmq
1.8 插件管理
开启网页管理界面
rabbitmq-plugins enable rabbitmq_management1.9 权限管理
添加用户
rabbitmqctl add_user test test设置为管理员
rabbitmqctl set_user_tags test administrator给用户test在test_host分配所有权限
rabbitmqctl set_permissions -p test_host test ".*" ".*" ".*" 移除用户test在分配的所有权限
rabbitmqctl clear_permissions -p / test2 yum 安装
2.1 安装 Erlang
首先信任 erlang-solutions 的 GPG 公钥:
rpm --import https://packages.erlang-solutions.com/rpm/erlang_solutions.asc新建/etc/yum.repos.d/erlang-solutions.repo
cat > /etc/yum.repos.d/erlang-solutions.repo << 'EOF'
[erlang-solutions]
name=CentOS $releasever - Erlang Solutions
baseurl=https://mirrors.tuna.tsinghua.edu.cn/erlang-solutions/centos/$releasever/
gpgcheck=1
gpgkey=https://packages.erlang-solutions.com/rpm/erlang_solutions.asc
enabled=1
EOF刷新缓存并安装 erlang 即可。
yum clean all
yum makecache安装Erlang
yum list erlang --showduplicates | sort -r
yum install erlang-24.2.1-1.el72.2 安装 RabbitMQ
下载
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.14/rabbitmq-server-3.7.14-1.el7.noarch.rpm输入秘钥
rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc安装
yum install rabbitmq-server-3.7.14-1.el7.noarch.rpm2.2.1 配置

2.2.2 启动
systemctl start rabbitmq-server.service查看状态
systemctl status rabbitmq-server.service开启网页管理界面
rabbitmq-plugins enable rabbitmq_management
systemctl restart rabbitmq-server.service3 docker 启动
docker run -d \
-p 5672:5672 \
-p 15672:15672 \
-h my-rabbit \
-e RABBITMQ_DEFAULT_USER=rabbit \
-e RABBITMQ_DEFAULT_PASS=rabbit \
-v /rabbitmq:/var/lib/rabbitmq \
rabbitmq:3.8.15-management-alpineOne of the important things to note about RabbitMQ is that it stores data based on what it calls the “Node Name”, which defaults to the hostname. What this means for usage in Docker is that we should specify / explicitly for each daemon so that we don’t get a random hostname and can keep track of our data:
-h --hostname
WARNING: As of RabbitMQ 3.9, all of the docker-specific variables listed below are deprecated and no longer used. Please use a configuration file instead; visit rabbitmq.com/configure to learn more about the configuration file. For a starting point, the 3.8 images will print out the config file it generated from supplied environment variables.
4 报错
4.1 exec: erl: not found
/etc/profile或者/etc/security/limit.d这些文件中配置的环境变量仅对通过pam登录的用户生效,而systemd是不读这些配置的,所以这就造成登录到终端时查看环境变量和手动启动应用都一切正常,但是systemd无法正常启动应用

修改rabbitmq-server,添加环境变量
ERLANG_HOME=/usr/local/erlang
PATH=$PATH:$ERLANG_HOME/bin4.2 {“no such file or directory“,“crypto.app“}
源码安装erlang的时候,在执行./configure的时候, 最后会看到类似如下的的提示信息

缺少 ssl 库
apt install -y libssl-dev安装后结果
