延时消息实现方案——Centos7安装RabbitMq延时队列插件rabbitmq_delayed_message_exchange

前言

在之前的项目中,遇到像订单延时关闭、消息定时通知这样的业务场景一般都用的Redis过期监听或者定时任务,他们都有致命的问题。

  1. Redis过期监听:
    Redis官网上明确的说过,Redis并不保证Key在过期的时候就能被立即删除,更不保证这个消息能被立即发出。所以,消息延迟是必然存在的,随着数据量越大延迟越长,延迟个几分钟都是常事。而且在Redis 5.0之前,这个消息是通过PUB/SUB模式发出的,他不会做持久化,至于你有没有接到,有没有消费成功,他不管。也就是说,如果发消息的时候,你的客户端挂了,之后再恢复的话,这个消息你就彻底丢失了。再有就是过期监听如果和业务模块写在一块,服务启动过多就会造成重复消费的麻烦事。
  2. 定时任务:
    同样的存在时间不精准的问题,定时任务的方式是会把本来比较分散的时间集中到任务调度的那一段时间,如果订单量比较大的话,那么会对数据库造成很大压力,而且执行时间很长,整个任务的时间越长,订单被扫描到时间可能就很晚,那么就会导致关闭时间更晚。

上诉问题可能会不满足大部分的业务需求,经过查阅资料,考虑到成本,方案完整性、以及方案的复杂度,还有用到的第三方框架的流行度来说,决定以后使用RabbitMq延时队列插件做为延时消息的解决方案。但是连接上RabbitMq以后发送延时消息的时候报错了,百度查原来是因为插件没有安装,在此记录一下安装过程。

一、查看RabbitMq版本

输入:

rpm -qa|grep rabbit

返回:

rabbitmq-server-3.12.4-1.el8.noarch

二、下载插件

去官网下载插件rabbitmq_delayed_message_exchange-3.12.0.ez,这里要注意插件的版本和你的RabbitMq大版本是否一致,我的RabbitMq版本是3.12.4,这里我下载的插件版本为3.12.0。
官方下载地址:

https://www.rabbitmq.com/community-plugins.html

三、查看RabbitMq安装路径

输入:

rpm -ql rabbitmq-server-3.12.4-1.el8.noarch

返回:

/usr/lib/rabbitmq/lib/rabbitmq_server-3.12.4/plugins/ra-2.6.3/ebin/ra_ets_queue.beam
/usr/lib/rabbitmq/lib/rabbitmq_server-3.12.4/plugins/ra-2.6.3/ebin/ra_file_handle.beam
/usr/lib/rabbitmq/lib/rabbitmq_server-3.12.4/plugins/ra-2.6.3/ebin/ra_flru.beam
/usr/lib/rabbitmq/lib/rabbitmq_server-3.12.4/plugins/ra-2.6.3/ebin/ra_leaderboard.beam
/usr/lib/rabbitmq/lib/rabbitmq_server-3.12.4/plugins/ra-2.6.3/ebin/ra_lib.beam
/usr/lib/rabbitmq/lib/rabbitmq_server-3.12.4/plugins/ra-2.6.3/ebin/ra_log.beam
/usr/lib/rabbitmq/lib/rabbitmq_server-3.12.4/plugins/ra-2.6.3/ebin/ra_log_cache.beam
...

得知RabbitMq插件目录在:

/usr/lib/rabbitmq/lib/rabbitmq_server-3.12.4/plugins

四、安装插件

将在官网下载好的插件放到RabbitMq的插件目录下,之后启动插件。
输入:

rabbitmq-plugins enable rabbitmq_delayed_message_exchange

重启RabbitMq使插件生效。
输入:

service rabbitmq-server restart

五、查看已安装的插件列表

输入:

rabbitmq-plugins list

返回:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值