1、RabbitMQ简介
RabbitMQ是一个开源的消息代理软件,实现了高级消息队列协议(AMQP),用于在不同的应用程序之间进行异步通信。RabbitMQ是一个由Erlang语言编写的消息中间件,它遵循AMQP协议,提供了稳定可靠的消息传输服务。
2、RabbitMQ 版本确认和安装包下载
RabbitMQ依赖于Erlang语言,所以我们安装RabbitMQ必须要先安装Erlang,RabbitMQ和Erlang有版本对应关系,我们必须选择合适的版本才能安装成功,访问链接: 官网版本对照,查看版本对应关系。
选定版本后访问链接下载安装包:官方RabbitMQ安装包下载 、官方Erlang-RPM安装包下载
本文选择 RabbitMQ 3.13.7 版本 和 Erlang 26.2.x
2.1 编译安装 Erlang 26.2.x
注意:RabbitMQ团队也维护了一套自己的Erlang版本,算是针对Erlang官方版的一个精简版本,只保留了RabbitMQ可能会使用到的功能模块。
附:Erlang 官方的 OTP 与 RabbitMQ 团队维护的 Erlang-RPM 的区别
本来打算下载Erlang-RPM安装包来搭建Erlang语言环境,结果报错,提示:OpenSSL 依赖的版本不对。无赖之下改用 Erlang源码编译安装:
(1) 安装依赖库
Erlang 需要一些依赖库才能成功编译和运行,安装这些依赖库,执行命令:
yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmlto perl wget
(2) 下载 Erlang 安装包
从官方网站下载 Erlang 26.2.5.10 的源代码包,执行命令:
wget https://github.com/erlang/otp/releases/download/OTP-26.2.5.10/otp_src_26.2.5.10.tar.gz
(3) 解压并编译安装
# 解压下载的源代码包 tar -xzvf ./otp_src_26.2.5.10.tar.gz # 进入解压后的目录 cd ./otp_src_26.2.5.10 # 配置安装选项 ./configure --prefix=/usr/local/erlang --with-ssl --enable-threads --enable-smp-support --enable-kernel-poll --enable-hipe --without-javac # 编译并安装 make && make install
(4) 配置环境变量
vim /etc/profile
在文件末尾添加以下内容:
PATH=$PATH:/usr/local/erlang/bin
使配置生效:
source /etc/profile
(5) 验证安装
[root@CentOS7-A tmp]# erl Erlang/OTP 26 [erts-14.2.5.9] [source] [64-bit] [smp:3:3] [ds:3:3:10] [async-threads:1] Eshell V14.2.5.9 (press Ctrl+G to abort, type help(). for help) 1>
(6) 配置命令行快捷方式(注意:开机启动systemctl脚本中会用到)
ln -sf /usr/local/erlang/bin/ct_run /usr/local/bin/ ln -sf /usr/local/erlang/bin/dialyzer /usr/local/bin/ ln -sf /usr/local/erlang/bin/epmd /usr/local/bin/ ln -sf /usr/local/erlang/bin/erl /usr/local/bin/ ln -sf /usr/local/erlang/bin/erlc /usr/local/bin/ ln -sf /usr/local/erlang/bin/escript /usr/local/bin/ ln -sf /usr/local/erlang/bin/run_erl /usr/local/bin/ ln -sf /usr/local/erlang/bin/to_erl /usr/local/bin/ ln -sf /usr/local/erlang/bin/typer /usr/local/bin/
2.2 二进制安装 RabbitMQ 3.13.7
(1) 下载安装包
二进制包无需再安装依赖库,解压后可直接使用,非常方便。这里选择下载:rabbitmq-server-generic-unix-3.13.7.tar.xz
(2) 解压安装包
# 解压 tar -xvJf ./rabbitmq-server-generic-unix-3.13.7.tar.xz
(3) 移动到指定目录
mv ./rabbitmq_server-3.13.7/ /data/rabbitmq_server
(4) 添加环境变量
vim /etc/profile
追加如下内容:
PATH=$PATH:/data/rabbitmq_server/sbin
环境变量生效:
source /etc/profile
(5) 安装RabbitMQ管理界面
# 进入软件根目录 cd /data/rabbitmq_server # 安装RabbitMQ管理界面 rabbitmq-plugins enable rabbitmq_management
(6) 开启RabbitMQ服务
# 使用后台守护进程开启 rabbitmq-server -detached
(7) 通过访问 http://IP地址:15672 进入到RabbitMQ管理后台
# 防火墙开放Web端口:15672 firewall-cmd --permanent --add-port=15672/tcp firewall-cmd --permanent --add-port=5672/tcp firewall-cmd --reload firewall-cmd --list-all
RabbitMQ 的默认端口如下:
1. AMQP 协议端口:5672(主要用于客户端连接)
2. 管理控制台端口:15672(用于访问 RabbitMQ 的 Web 管理界面)
3. STOMP 协议端口:61613
4. MQTT 协议端口:1883
5. HTTP API 端口:15672(与管理控制台端口一致)
(8) 登录管理后台
RabbitMQ 安装完后默认会guest这个用户,但是这个用户只允许在本地登录,所以用 IP地址:15672访问登录时时出现"User can only log in via localhost"提示。
解决方案:
可以新增一个新的用户并授予管理员角色去登录,这里我们创建一个 admin 123456
rabbitmqctl add_user admin 123456 rabbitmqctl set_user_tags admin administrator
这样就可以用admin 登录了,还有一种方式就是去修改RabbitMQ配置文件,可以去参考官网配置项资料,这里就不赘述了。
3、配置开机启动服务
(1) 添加专属用户
groupadd rabbitmq useradd -g rabbitmq rabbitmq # 注意:RabbitMQ软件需要这个家园目录/home/rabbitmq,且它会自动生成该家园目录
(2) 修改目录权限
chown -R rabbitmq:rabbitmq /data/rabbitmq_server chmod -R 755 /data/rabbitmq_server
(3) 创建systemd服务配置文件
vim /usr/lib/systemd/system/rabbitmq-server.service
输入以下内容:
[Unit] Description=RabbitMQ broker After=syslog.target network.target [Service] Type=notify User=rabbitmq Group=rabbitmq UMask=0027 NotifyAccess=all TimeoutStartSec=600 # To override LimitNOFILE, create the following file: # # /etc/systemd/system/rabbitmq-server.service.d/limits.conf # # with the following content: # # [Service] # LimitNOFILE=65536 LimitNOFILE=32768 # Note: systemd on CentOS 7 complains about in-line comments, # so only append them here # # Restart: # The following setting will automatically restart RabbitMQ # in the event of a failure. systemd service restarts are not a # replacement for service monitoring. Please see # https://www.rabbitmq.com/monitoring.html Restart=on-failure RestartSec=10 # WorkingDirectory=/var/lib/rabbitmq # ExecStart=/usr/sbin/rabbitmq-server # ExecStop=/usr/sbin/rabbitmqctl shutdown WorkingDirectory=/data/rabbitmq_server/var/lib/rabbitmq ExecStart=/data/rabbitmq_server/sbin/rabbitmq-server ExecStop=/data/rabbitmq_server/sbin/rabbitmqctl shutdown # See rabbitmq/rabbitmq-server-release#51 SuccessExitStatus=69 [Install] WantedBy=multi-user.target
(4) 使配置生效
# 设置开机自启动 systemctl enable rabbitmq-server # 重新加载systemd程序的配置文件 systemctl daemon-reload
(5) 常用命令:启动/关闭/重启
在测试新命令行之前,先关闭上面已经启动的RabbitMQ进程:
ps -ef | grep rabbitmq kill -9 进程ID
# 启动 systemctl start rabbitmq-server # 关闭 systemctl stop rabbitmq-server # 重启 systemctl restart rabbitmq-server
特别注意:
由于启动脚本中,使用的用户为 rabbitmq,所以在运行跟RabbitMQ相关的命令行时,一定要先切换至用户rabbitmq,否则会报错
# 修正目录权限 chown -R rabbitmq:rabbitmq /data/rabbitmq_server chmod -R 755 /data/rabbitmq_server # 修正Cookie权限 chmod 600 /root/.erlang.cookie # 切换用户至rabbitmq su rabbitmq
例如,我想查看一下当前有多少个RabbitMQ用户:
[root@ip-172-31-1-242 rabbitmq]# rabbitmqctl list_users Error: unable to perform an operation on node 'rabbit@ip-172-31-1-242'. Please see diagnostics information and suggestions below. Most common reasons for this are: * Target node is unreachable (e.g. due to hostname resolution, TCP connection or firewall issues) * CLI tool fails to authenticate with the server (e.g. due to CLI tool's Erlang cookie not matching that of the server) * Target node is not running In addition to the diagnostics info below: * See the CLI, clustering and networking guides on https://rabbitmq.com/documentation.html to learn more * Consult server logs on node rabbit@ip-172-31-1-242 * If target node is configured to use long node names, don't forget to use --longnames with CLI tools DIAGNOSTICS =========== attempted to contact: ['rabbit@ip-172-31-1-242'] rabbit@ip-172-31-1-242: * connected to epmd (port 4369) on ip-172-31-1-242 * epmd reports node 'rabbit' uses port 25672 for inter-node and CLI tool traffic * TCP connection succeeded but Erlang distribution failed * suggestion: check if the Erlang cookie is identical for all server nodes and CLI tools * suggestion: check if all server nodes and CLI tools use consistent hostnames when addressing each other * suggestion: check if inter-node connections may be configured to use TLS. If so, all nodes and CLI tools must do that * suggestion: see the CLI, clustering and networking guides on https://rabbitmq.com/documentation.html to learn more Current node details: * node name: 'rabbitmqcli-711-rabbit@ip-172-31-1-242' * effective user's home directory: /root * Erlang cookie hash: M+FZAofDvSrUo8MZNKPlJA==
直接报上述错误 Error: unable to perform an operation on node 'rabbit@ip-172-31-1-242'. Please see diagnostics information and suggestions below.
解决方案为,先切换至rabbitmq用户:
[root@ip-172-31-1-242 rabbitmq]# su rabbitmq [rabbitmq@ip-172-31-1-242 ~]$ rabbitmqctl list_users Listing users ... user tags admin [administrator] guest [administrator]
(6) 日志目录
/data/rabbitmq_server/var/log/rabbitmq/rabbit@CentOS7-A.log
4、设置织信低代码平台所需的 账号及权限
参考:https://next.informat.cn/doc/guide/faq/rabbitmq/
# 切换用户 su rabbitmq # 添加用户 rabbitmqctl add_user root mq_Informat_20221101 # 设置角色 rabbitmqctl set_user_tags root administrator # 设置权限 rabbitmqctl set_permissions -p "/" root ".*" ".*" ".*" # ------------------------------ # 检查执行结果 # ------------------------------ # 用户列表 rabbitmqctl list_users # 查看用户权限 rabbitmqctl list_user_permissions root
参考: