目录

RabbitMQ安装

RabbitMQ是一个实现了AMQP(Advanced Message Queuing Protocol)高级消息队列协议的消息队列服务,用Erlang语言。

RabbitMQ是由Erlang语言开发,所以需要先安装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。

img

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/profile

测试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().

我们创建一个名为 rabbitmq 的系统用户,这种用户默认不允许直接登录,安全性更高。

# 创建用户组
groupadd rabbitmq

# 创建用户并加入组,禁止其 shell 登录
useradd -r -g rabbitmq -m -s /sbin/nologin rabbitmq

现在你需要确保 安装目录数据目录 都能被这个新用户访问。

# 授权安装目录(假设在 /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/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/rabbitmq

创建/编辑配置文件

前往你的安装目录(例如/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/log
vi /etc/profile
# 添加以下配置
# set rabbitmq environment
RABBIT_HOME=/usr/local/rabbitmq
export PATH=${PATH}:${RABBIT_HOME}/sbin
# 使得文件生效
source /etc/profile
rabbitmq-server -detached

查看服务状态

rabbitmqctl status

显示如下信息,说明已经启动

停止RabbitMQ

rabbitmqctl stop

创建文件

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. 重载 Systemd 管理器systemctl daemon-reload
  2. 设置开机自启systemctl enable rabbitmq
  3. 立即启动服务systemctl start rabbitmq
  4. 检查状态systemctl status rabbitmq

开启网页管理界面

rabbitmq-plugins enable rabbitmq_management

添加用户

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 / test

首先信任 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.el7

下载

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.rpm

image-20221009161831194

rabbitmq.conf.example

systemctl start rabbitmq-server.service

查看状态

systemctl status rabbitmq-server.service

开启网页管理界面

rabbitmq-plugins enable rabbitmq_management
systemctl restart rabbitmq-server.service
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-alpine

One 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.

/etc/profile或者/etc/security/limit.d这些文件中配置的环境变量仅对通过pam登录的用户生效,而systemd是不读这些配置的,所以这就造成登录到终端时查看环境变量和手动启动应用都一切正常,但是systemd无法正常启动应用

image-20221014104308082

修改rabbitmq-server,添加环境变量

ERLANG_HOME=/usr/local/erlang
PATH=$PATH:$ERLANG_HOME/bin

源码安装erlang的时候,在执行./configure的时候, 最后会看到类似如下的的提示信息

image-20221028145302522

缺少 ssl 库

apt install -y libssl-dev

安装后结果

image-20221028145336942

相关内容