【高并发解决方案】异步延时消息队列的实现(干货)

如果你碰过这样的场景:
1、客户下单后,12小时后检查订单是否完成
2、用户进行某个操作30分钟后发送一封邮件
3、高并发场景下异步延迟写入数据库(为了错峰)
实际上就是实现一个异步延时消息队列系统,它基本的功能是:
1、进入队列的消息在延时时间到达后才能出列被消费
2、消息出列后消费失败可以重回队列然后重新出列
以下介绍几种实现方案,可以依据具体业务需求进行选择。
一、简单粗暴的mongodb
mongodb吃内存的特性一值备受人诟病,但使用mongodb的文档原子修改特性,可以快速实现延时消息队列功能。
二、重量级、高可用的RabbitMQ
三、高性能、抗高并发的redis
redis简直就是抗高并发的神器,遗憾的是使用redis的基本数据没法实现异步延时消息队列的,有人会说使用redis的有序集合不就可以了吗?如果每秒只有一个任务,当然没问题。倘若并发场景下,你可以控制每次取出来的消息数量吗?你可以保证消息被消费失败后能重回队列吗?显然,纯粹地使用有序集合是没法满足这样的需求的。
或许你听说过mysql的存储过程,redis的lua脚本就是类似这样的功能。
【待续2017-08-13 13:56:25】

发表评论

电子邮件地址不会被公开。 必填项已用*标注