一些收藏

延迟队列技术方案

2022-10-14  本文已影响0人  不怕天黑_0819

什么场景需要使用延迟队列

1、订单成功后,在30分钟内没有支付,自动取消订单
2、外卖平台发送订餐通知,下单成功后60s给用户推送短信。
3、如果订单一直处于某一个未完结状态时,及时处理关单,并退还库存
4、淘宝新建商户一个月内还没上传商品信息,将冻结商铺等

我们的需求

现有方案

目前开源的延迟消息,也就pulsar比较可靠,其次是rocketmq,但rocket只支持18个等级的固定刻度,pulsar也是近几天内的任意时间,长时间不行。其他的,rabbit不适合大量堆积,redis key多的时候会严重滞后(惰性删除),而且没有ack。sorted set,在field超过一定量时预计5000左右会产生性能问题,需要做二次分片。jdk的delayqueue,性能就不提了,只能做短时、量少的延迟消息,而且还没有ack,可能存在丢失,如果要写入数据库,也很麻烦。内存时间轮性能好点,但也没法ack,而且消费阻塞会引起问题(单线程)
目前最佳实践就是组合以上的几种,定时任务+pulsar/rocket本身时间轮等,多重组合,可以实现海量,超长时间的延迟消息(不修改几种组件源码的情况下)

参考链接:
https://www.cnblogs.com/rickiyang/p/12237612.html

https://juejin.cn/post/6844904150703013901

https://www.gameres.com/875153.html

饿了么交易域的延迟队列方案分析

https://www.cnblogs.com/hzmark/p/mq-delay-msg.html

上一篇下一篇

猜你喜欢

热点阅读