rocktmq 消息延时清空_基于 RocketMQ 的延时消息改造:支持任意时间延时

1. 概述

1.1 问题概述

消息队列作为高并发系统的核心组件之一,能够帮助业务系统解构提升开发效率和系统稳定性。

而越来越多的公司采用 RocketMQ 做为自己系统的消息队列,但是目前开源的 RocketMQ 的延时消息只支持固定的延时消息,比如:

messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h

但实际业务会涉及到可能任意的时间延迟发送。

而这一切需要我们基于 RocketMQ 进行改造适应任意时间延时的需求。

RocketMQ 原来的延时消息如何实现

任意时间的延时消息如何实现

如何使用改造后的延时消息

基于 RocketMQ 的 Stream 的如何调用改造后的延时消息

1.2 名词解析

名词 | 解释 | 备注

-|-|-

topic | topic 为 rocketmq 业务消息分组 | Topic 包含多个队列 |

queue | topic 包含的队列 | - |

queueId|topic 包含的 queue 的 id|-|

broker | 消息存储中心,消息存储是 broker 的核心 | 所有的消息都保存在 broker 当中 |

offset| queue 是无限长的数组,一条消息进来下标就会长 1,下标就是 offset|-|

ConsumeQueue|一个消息的逻辑队列,存储了这个 Queue 在 CommitLog 中的起始 offset,log 大小和 MessageTag 的 hashCode|-|

wheel-timer-queue|高性能延时处理的任务队列|开源实现"wheel-timer-queue"|

环形队列|wheel-timer-queue 的别称,其内部实现保存延时消息的队列像一个环形队列|-|

移动针|环形队列里的一格,当设置 3600 大小的时候,一秒则移动一格|-|

slot|环形对列每一格对应的集合|-|

num|延时消息属于环形队列的某个集合,大于 3600,则 num=延时数值/3600,这样超过 3600 还是可以对应在某个集合中,只是 num>0|-|

RocketMQTask|是环形队列判断延时到期触发的一个 task 任务|-|

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值