目标

因为rocketmq只有固定18个等级的延时消息策略,所以需要实现自定义时长的延时消息。

思路

可以使用多段延时进行接力的方式来实现无限时间延时:
比如需要延时2小时35分,我们可以先延时2小时,消息到期后再将其延时30分钟,30分钟到期后再延时5分钟便可以实现。

实现

我个人的实现为了减少消息队列的压力,最后10秒便不再进行延时而是直接消费掉了。这种方式最后会有一定的误差(大概几秒钟),如果是误差要求很低的场景可能需要进一步修改。

代码地址:https://github.com/SLY1311220942/rocketmq

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐