首先,我们分析了这个过程
我们现在可以理解中间的几个组件
其中,计时器负责旋转,工作池,延迟存储库和现成的队列都是不同职责的集合。
现在,我们根据设计内容完成设计。我们分四个步骤进行此设计
当前需要两个对象,一个是任务对象(作业),一个是负责保存任务参考(延迟作业)的负责。不会引入弹簧启动基础知识。推荐本实际战斗教程:github.com/javastacks/spring-boot-best-prapice
任务对象
任务参考对象
目前,我们需要完成三个容器,工作任务池,延迟任务容器的创建,并完成任务容器
工作任务池为普通K/V结构提供了基本操作
延迟任务,使用排序的ZSET保存数据,提供最小值和其他操作
要完成任务,请使用内部主题进行细分,每个主题对应于列表集合
设置一个线程池,为每个桶设置旋转查询操作
通过Postman请求:Local主机:8000/delay/添加
目前,此延迟任务已添加到线程池中
设置10秒后,将添加任务
目前,我们要求Localhost:8000/delay/pop
目前,任务已响应。在修改状态时设置超时,然后将其放在delaybucket中
设计30秒后,如果未消费任务,它将重新启动在Readyqueue中
现在我们要求:localhost:8000/delay/delete
目前,此任务将在工作库中删除。目前,元数据不再存在,但是任务仍在delaybucket.remove中循环。