为什么有这个项目?
有些场景下需要在一定时间后执行某个任务。例如:
1. 生成订单30分钟未支付,则自动取消
2. 生成订单60秒后,给用户发短信
目前比较流行的开源消息队列,都没有能够直接支持任意精度延时消息的,比如rocketmq只支持特定等级的延时任务,rabbitmq也需要为不同延时时间的任务设置单独的死信队列。在调研了很多方案之后,有了这个基于rocketmq实现的延时消息服务。
//
延时服务问题点
1. 排序
2. 消息存储
• 支持任意延迟意味着消息需要在服务端进行排序。服务器需要保证延时低的消息被先发送出去,MQ的消息都是保证发送的顺序,根据延时时间重排序会极其消耗性能。
• 常见的消息队列的消息存储基本都是按顺序存储的,并且消息保存时间有限制,如rocketmq消息文件默认超过3天没有更新就会被删除。要支持任意精度的时间需要长时间保存,对服务器磁盘大小也有很大压力。
• 方案: hash wheel timer
功能介绍
• 该服务的主要功能: