Author: haoransun
Wechat: SHR—97
前言
个人在CentOS7下安装RabbitMQ以及遇到的问题。
RabbitMQ 是流行的开源消息队列系统,是 AMQP(Advanced Message Queuing Protocol 高级消息队列协议)的标准实现,用 erlang 语言开发。RabbitMQ 具有良好的性能和时效性,同时还能够非常好的支持集群和负载部署,非常适合在较大规模的分布式系统中使用。并且支持多种开发语言。我们项目中使用RabbitMQ作为消息队列,解耦业务,构建高可靠的消息队列系统。RabbitMQ可以用在订单系统、日志系统、数据收集等常见场景中。
1. 安装RabbitMQ
可能需要sudo权限
安装 RabbitMQ 之前要安装 Erlang,需要先到RabbitMQ官网看下版本对应关系。必须看
当前最新版rabbitmq-server是rabbitmq-server-3.8.3-1.el7.noarch.rpm,最新版Erlang是erlang-23.0.1-1.el7.x86_64.rpm。我们可以分别在Github和RabbitMQ官网下载对应的版本的rpm包。
el7:即CentOS7。
我们使用的版本:
rabbitmq-server-3.8.3-1.el7.noarch.rpm
erlang-22.3.4-1.el7.x86_64.rpm
下载好rpm包后,接下来我们使用rpm进行安装。
首先安装依赖socat,安装Erlang时需要这个。
1 | yum install -y socat |
接下来安装 Erlang 和 RabbitMQ
1 | rpm -ivh erlang-22.3.4-1.el7.x86_64.rpm |
执行上述两行命令后,即完成了Erlang和RabbitMQ的安装,就这么简单。
2. RabbitMQ的基本操作
1 | # 启动RabbitMQ: |
更多使用方法,参考帮助手册。
3. 开启Web管理接口
Web管理界面,只需要启动插件即可使用
1 | rabbitmq-plugins enable rabbitmq_management |
需要开端口
1 | firewall-cmd --zone=public --add-port=15672/tcp --permanent |
插件管理:
1 | #插件列表: |
我们可以在后台管理用户、队列等信息。
4. 配置RabbitMQ
关于RabbitMQ的配置,可以下载RabbitMQ的配置文件模板到/etc/rabbitmq/rabbitmq.config
, 然后按照需求更改即可。
关于每个配置项的具体作用,可以参考官方文档。
5. 开启用户远程访问
默认情况下,RabbitMQ的默认的guest
用户只允许本机访问, 如果想让guest
用户能够远程访问的话,只需要将配置文件中的loopback_users
列表置为空即可,如下:
1 | {loopback_users, []} |
另外关于新添加的用户,直接就可以从远程访问的,如果想让新添加的用户只能本地访问,可以将用户名添加到上面的列表, 如只允许admin
用户本机访问。
1 | {loopback_users, ["admin"]} |
restart即可
6. 修改RabbitMQ默认端口
RabbitMQ默认开启了几个端口:
4369
:erlang发现口
5672
:client端通信口,客户端要连接RabbitMQ服务时要用到
15672
:后台管理界面ui端口,进入管理后台时访问url如:http://ip:15672/
25672
:server间内部通信口
在生产环境下,我们出于安全等原因希望修改掉默认的端口号。
安装新版的RabbitMQ-3.8.3后,发现找不到它的配置文件,按常理,服务的端口开发都可以在配置文件里配置的。但是事实上RabbitMQ-3.8.3并没有生成配置文件,需要我们手动添加配置文件。
官方建议配置文件的位置:/etc/rabbitmq/rabbitmq.conf
我们现在要做的是把默认端口5672改成56720,并且允许远程访问。把web管理默认端口15672改成56271。只需如下配置:
1 | #vim /etc/rabbitmq/rabbitmq.conf |
保存,并重启RabbitMQ服务。使用netstat -lntp
查看端口监听情况:
1 | [root@haoransun ~]# firewall-cmd --zone=public --add-port=56721/tcp --permanent |
可以到官网地址:https://www.rabbitmq.com/configure.html,了解RabbitMQ的性能优化方面的配置。
7. 设置权限
1 | rabbitmqctl add_vhost admin |
注释:主要是set_permissions的使用,先看下命令的格式:
set_permissions [-p vhost] {user} {conf} {write} {read}
注意:
这里的权限,只是针对一般用户的访问权限,注意和角色的区分。举个例子来说,非管理用户(普通用户),角色设置为none,然后在这里配置conf、write、read的权限。
conf、write、read采用正则表达式,这里的正则主要是针对exchange和queue。主要2种特殊的表达式:
1 | ^$:表示完全不匹配(即没有权限) |