背景
在业务前沿,还存在着很多依赖扫表存在的job,数据量少还好,一但数据量增大,扫表将是一个非常可怕的事情,刚好公司架构中有rocketMQ,那就来用延时消息来解决吧
设计目的
支持任意时间的延时消息,扩展rocketMQ
设计架构
image-20200111151017731实现
1.rocketMQ默认支持18个等级 1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
2.支持任意延时,设计逻辑为拆分法,用默认的rocketMQ去支持 任意时间都能够通过上面的时间组装出来
3.在1分中内需要发送的采用时间轮方式,发送出去
4.延时会走 guava-topic,不会走业务需要的topic,只有当真正需要发送的时候才会走业务topic
5.考虑1分钟内由于强制重启等所带来的数据丢失问题. (TODO)
代码
优点
- 不需要依赖除rocketMQ以外的任何中间间,可以算是0侵入
- 支持任意时间纬度的延时
- 实现简单,浅显易懂,安全与否取决于rocketMQ
- rocketMQ所有的优点
缺点
- 极端情况下会有一分钟的数据丢失(服务重启并且满足刚好进入时间轮)
- 增大了rocketMQ的自带的延时压力
- rocketMQ所有的缺点
网友评论