Centos7下RabbitMQ安装

一、安装

1.1 下载

1.2 安装

# 安装erlang
rpm -ivh esl-erlang_23.3.1-1_centos_7_amd64.rpm
## 如果安装时出现这个错误
warning: esl-erlang_22.3.1-1_centos_7_amd64.rpm: Header V4 RSA/SHA1 Signature, key ID a14f4fca: NOKEY
error: Failed dependencies:
# 执行下面步骤再安装
yum -y install epel-release
yum -y install unixODBC unixODBC-devel wxBase wxGTK SDL wxGTK-gl

# 安装rabbitmq
yum install socat -y
rpm -ivh rabbitmq-server-3.9.4-1.el7.noarch.rpm

1.3 添加到系统服务

#添加开机启动 RabbitMQ 服务
chkconfig rabbitmq-server on

#启动服务
/sbin/service rabbitmq-server start

#查看服务状态
/sbin/service rabbitmq-server status

#停止服务
/sbin/service rabbitmq-server stop

#重启服务
/sbin/service rabbitmq-server restart

二、配置

2.1 配置web管理界面

# 先关闭服务
/sbin/service rabbitmq-server stop

#开启 web 管理插件(执行这个,需要先关闭mq服务)
rabbitmq-plugins enable rabbitmq_management

# 启动服务
/sbin/service rabbitmq-server start

2.2 配置新用户

# 进入目录
cd /etc/rabbitmq/

# 创建配置文件
vim rabbitmq-env.conf
# 写入以下内容
CONFIG_FILE=/etc/rabbitmq/rabbitmq.conf

# 保存,创建配置文件
vim rabbitmq.conf
# 写入以下内容
loopback_users = none
# 保存,重启服务

# 进入以下目录
cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.9.4/sbin
#创建账号,账号:admin,密码:123456
rabbitmqctl add_user admin 123456
# 给账号分配角色
rabbitmqctl set_user_tags admin administrator
# 给账号分配权限
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
# 重启服务,并用admin账号登录管理界面

三、配置rabbitmq延迟队列插件

3.1 案例说明

  • 对于经典订单系统,用户在下单后30分钟未操作,系统将删除用户下的订单;

  • 此时使用传统的定时任务扫描数据库并更改也可以完成,但并不能达到实时更新,且当数据量非常大的时候,是否损耗性能

  • 使用rabbitmq的延迟队列,用户在下单后将订单数据放入延迟队列,并设置30分钟的延迟,到达时间后该操作放入死信队列

  • 消费者消费死信队列数据,判断订单是否支付,未支付将删除订单

  • 以上使用rabbitmq存在一个非常大的问题,加入第一个入队列的订单的延时为100s,第二个加入队列的订单的延时为10s,明显第二个加入队列的更先进入死信队列被消费

  • 但rabbitmq的延迟队列必须按加入顺序出队列。显然是不合理的

3.2 整改方案(参考)

# 进入rabbitmq插件目录
cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.9.4/plugins
# 下载插件
wget https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/3.9.0/rabbitmq_delayed_message_exchange-3.9.0.ez
# 进入目录
cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.9.4/sbin
# 执行命令
rabbitmq-plugins enable rabbitmq_delayed_message_exchange

注:RabbitMQ延迟队列的使用,见:下一篇博客,RabbitMQ延迟队列的使用方式