延迟任务
2019-12-30 本文已影响0人
i灬Mango
[研究背景]
🌰: 下单之后如果三十分钟之内没有付款就自动取消订单。
🌰: 定时任务的调度, 当天某些需要处理的数据
[当前处理方式]
定期轮训数据库
优点:实现简单
缺点:数据量过大时会消耗太多的IO资源,效率太低
[思路]
- swoole定时器
- 利用rabbitMQ的TTL机制
[实践]
swoole
ps: 本来是想解决 lumen秒级系统定时任务来了解的(lumen秒级定时 可以写一个互斥+sleep实现 但觉得low 好了好了 回归正题)
a simple demo
延迟/定时 demo就....简单利用了一下,顺便看了看swoole是真滴强,,,就是需要一定的学习成本
也出了好几个框架铺平了路
rabbitMQ理论验证
Dead Letter Exchange
在队列上指定一个死信交换机,当在该队列上发生:
1.消息被拒绝
2.消息过期而被删除(TTL)
3.消息数量超过队列最大限制而被删除
4.消息总大小超过队列最大限制而被删除
上边的抄来的~~~~~~ 我们来看TTL就好了
就这么个意思
咱先来个交换机
就是个普通的交换机
搞一个死信queue
我们之前创建的交换机 作为DLX (但要注意 in the same virtual host)
设置DLX
我又创建了一个普通queue 作为死信消息的载体queue
next...
绑定一哈~
好啦 我们可以验收成果了 请看演示.......