说明:收录25万 73个行业的国家标准 支持批量下载
(19)国家知识产权局 (12)发明 专利申请 (10)申请公布号 (43)申请公布日 (21)申请 号 202211109479.3 (22)申请日 2022.09.13 (71)申请人 天翼安全科技有限公司 地址 100010 北京市东城区朝阳门北 大街 19号中国电信大厦 (72)发明人 臧朱龙  (74)专利代理 机构 北京同达信恒知识产权代理 有限公司 1 1291 专利代理师 潘雪 (51)Int.Cl. G06F 9/48(2006.01) G06F 9/52(2006.01) G06F 16/22(2019.01) G06F 16/2455(2019.01) (54)发明名称 一种实现分布式延时任务的方法、 装置及设 备 (57)摘要 本申请提供一种实现分布式延时任务的方 法、 装置及设备, 所述方法包括: 获取待处理任 务, 以任务ID为Key获取分布式锁后提交任务到 数据库Redi s; 周期性遍历 任务执行器队列, 每次 遍历到当前任务执行器时, 以当前任务执行器对 应的任务类 型为Key访问数据库Redi s, 查询队列 中对应任务类型待处理任务的任务执行到期时 间中最靠 前的目标任务确认是否到期, 否则遍历 下一个当前任务执行器, 是则利用目标任务的ID 获取分布式锁后, 通过当前任务执行器的工作线 程执行目标任务, 并遍历下一个当前任务执行 器, 若未获取到分布式锁则遍历下一个 当前任务 执行器。 本申请以更低的复杂度解决一致性问题 和幂等性问题, 有效管理不同类型的任务。 权利要求书2页 说明书11页 附图4页 CN 115480894 A 2022.12.16 CN 115480894 A 1.一种实现分布式延时任务的方法, 应用于生产端, 其特 征在于, 包括: 获取待处 理任务, 利用所述任务的ID从数据库Redis获取分布式锁; 若未获取到所述分布式锁, 则自动放弃提交所述待处 理任务; 若获取到所述分布式锁, 则根据所述待处理任务的任务信息及预先定义的任务结构 体, 生成所述待处 理任务对应的任务结构体; 将生成的任务结构体以ZSet数据结构存储, 并提交到数据库Redis的任务队列, 所述 ZSet数据结构包括作为键Key的任务类型、 作为值value的任务结构体、 作为score的任务执 行到期时间。 2.如权利要求1所述的方法, 其特征在于, 所述任务结构体包括如下信 息项中的至少一 项: 任务ID、 任务类型、 任务执 行到期时间、 扩展数据、 任务执 行所需数据; 所述扩展数据包 含任务的请求上 下文信息 。 3.一种实现分布式延时任务的方法, 应用于消费端, 其特 征在于, 包括: 周期性遍历任务执行器队列, 每次遍历到当前任务执行器时, 以所述当前任务执行器 对应的任务类型为K ey访问数据库Redis; 查询任务队列中对应所述任务类型的至少一个待处理任务的score, 确定所述至少一 个待处理任务中任务执 行到期时间最靠前的目标任务; 确定所述目标任务未到期时, 遍历下一个当前任务执行器, 否则, 利用所述目标任务的 ID获取数据库Redis的分布式锁; 若未获取到所述分布式锁, 自动放弃 执行目标任务, 并遍历下一个当前任务执 行器; 若获取到所述分布式锁, 从数据库Redis中获取所述目标任务的value, 通过当前任务 执行器的工作线程执 行所述目标任务, 并遍历下一个当前任务执 行器。 4.如权利要求3所述的方法, 其特 征在于, 所述任务执 行器采用如下 方式生成: 以注解的形式标注不同任务执 行器对应的任务类型; 针对不同任务类型的任务执 行器, 定义对 任务结构体中数据进行处 理的处理逻辑; 将针对各任务类型定义的处理逻辑与对应的注解, 结构化成对应任务类型的任务执行 器。 5.如权利要求4所述的方法, 其特征在于, 将针对各任务类型定义的处理逻辑与对应的 注解, 结构化成对应任务类型的任务执 行器, 包括: 将针对各任务类型定义的处理逻辑与对应的注解, 结构化成包括任务类型、 反射调用 参数的任务执 行器; 所述反射调用参数用于根据对任务结构体中数据进行处理 的处理逻辑, 利用从数据库 Redis获取的目标任务的value, 执 行所述目标任务。 6.如权利要求5所述的方法, 其特 征在于, 任务执 行器还包括: 用于读取用户指令的任务确认接口; 其中, 通过当前任务执行器的工作线程从所述任务确认接口读取用户指令, 根据用户 指令在执行所述目标任务完成后删除所述目标任务, 或者重新提交所述目标任务并重新设 定所述目标任务的任务执 行到期时间。 7.如权利要求3所述的方法, 其特 征在于, 采用如下 方式确认目标任务是否 到期, 包括:权 利 要 求 书 1/2 页 2 CN 115480894 A 2若所述目标任务的score晚于当前系统时钟, 则所述目标任务到期, 否则所述目标任务 未到期。 8.如权利要求3所述的方法, 其特征在于, 从数据库Redis中获取所述目标任务的 value, 通过当前任务执 行器的工作线程执 行所述目标任务, 包括: 从数据库Redis中获取所述目标任务的value, 利用所述目标任务的value中的扩展数 据, 在当前任务执 行器的工作线程还原所述目标任务的请求上 下文; 还原完请求上下文后, 利用从数据库Redis中获取的所述目标任务的value中的任务执 行所需数据, 执 行所述目标任务。 9.如权利要求3所述的方法, 其特 征在于, 还 包括: 通过当前任务执行器的工作线程执行完成所述目标任务后, 数据库Redis自动删除所 述目标任务。 10.一种实现分布式延时任务的装置, 作为 生产端, 其特 征在于, 包括: 分布式锁获取模块, 用于获取待处理任务, 利用所述任务的ID从数据库Redis获取分布 式锁; 任务放弃模块, 用于若未获取到所述分布式锁, 则自动放弃提交所述待处 理任务; 任务结构体定义模块, 用于若获取到所述分布式锁, 则根据所述待处理任务的任务信 息及预先定义的任务结构体, 生成所述待处 理任务对应的任务结构体; 任务提交模块, 用于将生成的任务结构体以ZSet数据结构存储, 并提交到数据库Redis 的任务队列, 所述ZSet数据结构包括作为键Key的任务类型、 作为值value的任务结构体、 作 为score的任务执 行到期时间。 11.一种实现分布式延时任务的装置, 作为消费端, 其特 征在于, 包括: 任务执行器遍历模块, 用于周期性遍历任务执行器队列, 每次在遍历到当前任务执行 器时, 以所述当前任务执 行器对应的任务类型为K ey访问数据库Redis; 查找到期任务模块, 用于查询任务队列中对应所述任务类型的至少一个待处理任务的 score, 确定所述至少一个待处 理任务中任务执 行到期时间最靠前的目标任务; 分布式锁获取模块, 用于确定所述目标任务未到期时, 遍历下一个当前任务执行器, 否 则, 利用所述目标任务的ID获取 数据库Redis的分布式锁; 任务放弃模块, 用于若未获取到所述分布式锁, 自动放弃执行目标任务, 并遍历下一个 当前任务执 行器; 任务执行模块, 用于若获取到所述分布式锁, 从数据库Redis中获取所述目标任务的 value, 通过当前任务执行器对应的工作线程执行所述目标任务, 并遍历下一个 当前任务执 行器。 12.一种实现分布式延时任务的电子设备, 其特征在于, 包括至少一个处理器; 以及与 所述至少一个处理器通信连接的存储器; 其中, 所述存储器存储有可被所述至少一个处理 器执行的指令, 所述指令被所述至少一个处理器执行, 以使所述至少一个处理器能够执行 如权利要求1 ‑9中任何一项所述的方法。 13.一种计算机程序介质, 其特征在于, 所述计算机存储介质存储有计算机程序, 所述 计算机程序用于使计算机执 行如权利要求1 ‑9中任何一项所述的方法。权 利 要 求 书 2/2 页 3 CN 115480894 A 3

.PDF文档 专利 一种实现分布式延时任务的方法、装置及设备

文档预览
中文文档 18 页 50 下载 1000 浏览 0 评论 309 收藏 3.0分
温馨提示:本文档共18页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
专利 一种实现分布式延时任务的方法、装置及设备 第 1 页 专利 一种实现分布式延时任务的方法、装置及设备 第 2 页 专利 一种实现分布式延时任务的方法、装置及设备 第 3 页
下载文档到电脑,方便使用
本文档由 人生无常 于 2024-03-18 17:15:04上传分享
友情链接
交流群
  • //public.wenku.github5.com/wodemyapi/22.png
-->
站内资源均来自网友分享或网络收集整理,若无意中侵犯到您的权利,敬请联系我们微信(点击查看客服),我们将及时删除相关资源。