目标
因为rocketmq只有固定18个等级的延时消息策略,所以需要实现自定义时长的延时消息。
思路
可以使用多段延时进行接力的方式来实现无限时间延时:
比如需要延时2小时35分,我们可以先延时2小时,消息到期后再将其延时30分钟,30分钟到期后再延时5分钟便可以实现。
实现
我个人的实现为了减少消息队列的压力,最后10秒便不再进行延时而是直接消费掉了。这种方式最后会有一定的误差(大概几秒钟),如果是误差要求很低的场景可能需要进一步修改。
代码地址:https://github.com/SLY1311220942/rocketmq