美文网首页Java工具包
RocketMQ支持任意时间的延时消息,零侵入

RocketMQ支持任意时间的延时消息,零侵入

作者: civism | 来源:发表于2020-01-11 17:55 被阅读0次

    背景

    在业务前沿,还存在着很多依赖扫表存在的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)

    代码

    https://github.com/civism/civism-rocket

    优点

    • 不需要依赖除rocketMQ以外的任何中间间,可以算是0侵入
    • 支持任意时间纬度的延时
    • 实现简单,浅显易懂,安全与否取决于rocketMQ
    • rocketMQ所有的优点

    缺点

    • 极端情况下会有一分钟的数据丢失(服务重启并且满足刚好进入时间轮)
    • 增大了rocketMQ的自带的延时压力
    • rocketMQ所有的缺点

    相关文章

      网友评论

        本文标题:RocketMQ支持任意时间的延时消息,零侵入

        本文链接:https://www.haomeiwen.com/subject/colbactx.html