当前位置: 首页 > news >正文

abpvnext后台工作者使用quartz扩展的一些思路和使用细节记录--(未完待续)

需求背景描述:

我有一个温湿度数据采集的物联网系统,每个租户都需要定时执行若干种任务, 不同的租户, 他定时执行的间隔不一样 ,比如 

A租户,数据保存间隔60秒,数据是否超限的轮询间隔是是600秒, 

B租户,数据保存间隔是300秒,数据是否超限的轮询间隔是1800秒。


经过查阅abp官网文档,和quartz资料,得到如下思路:

1、用quartz来排队执行后台工作者,需要一个job执行队列表。

2、搞一个定时任务,最简单的比如timer,然后定时去获取所有租户的定时任务间隔时间,看看是否有修改,有修改就按照新的定时任务轮询间隔,给job表按租户更新新的执行队列行。

3、然后quartz就不停的排队定时去job执行对列表中领取任务执行。


具体执行思路如下:

1、定义 一个job队列表,包含字段:

租户id,执行的业务类型(按setinfo表对应的设置字段名来填),执行时间间隔,上次执行时间,执行次数(可选),失败次数(可选),执行状态锁(1执行中,0空闲中)。

job队列表以租户和执行的业务类型2个字段来判断唯一值,每个租户同一个执行类型只允许有一行数据。

比如租户A,执行类型offline ,执行周期60秒

租户B,执行类型savetime,执行周期1800秒

2、搞一个普通的后台工作者,比如定时1分钟去扫描一次setinfo表,然后遍历分析看看每个租户的各项需要执行的判定周期是否有变动,如果有变动就到job队列表,新增或者修改这个租户对应的执行业务类型的周期值。

3、搞个quartz后台工作者,定期调用业务执行类PeriodicJudgmentService类的PeriodicJudgmentData方法,这个方法业务为:

读取job队列表数据,遍历所有job数据行,

如果当前时间和job行上次执行时间的差是大于job的执行时间间隔列的值,我们就需要根据租户ID查询到setinfo、tmplist、descList信息装填到定义的变量,做好数据准备。

然后根据job的类型,将上面准备好的数据变量做参数传递,去调用执行指定的业务逻辑方法,比如离线判断一个方法,数据超限判断一个方法,数据保存一个方法。

4、其实还可以根据job的执行类型,来分别建立quartz后台工作者,

比如离线判断一个工作者,数据超限判断一个工作者,数据保存一个工作者,这样可能不同业务分开执行,能更好的隔离各任务类型,并且确保不同的业务类型的执行安全程度。

2023-5-13日临时思考记录:

每个任务类型的执行队列,那么多行,怎么判断是否执行完成了一轮是个问题,是否需要在队列表中加执行顺序。或者是否要考虑再加一个任务执行记录表,记录执行了哪些任务。


http://www.lryc.cn/news/67764.html

相关文章:

  • 提升应届生职场竞争力:有效策略和关键推动因素
  • PBDB Data Service:List of fossil collections(化石采集记录列表)
  • centos安装SNB服务
  • 课程《JavaWeb基础框架程序设计》考试题下篇——数据库与表单操作用题(人事管理平台的添加员工档案信息的操作题)
  • Linux-初学者系列——篇幅4_系统运行相关命令
  • 无缝集成:利用Requests库轻松实现数据抓取与处理
  • 几种内部排序算法的cpp代码实现与分析
  • 第3天学习Docker-Docker部署常见应用(MySQL、Tomcat、Nginx、Redis、Centos)
  • 给大家介绍四款最受欢迎的抓包神器
  • 解决Reids过期方案 游标遍历清除Redis过期的key
  • K8s基础10——数据卷、PV和PVC、StorageClass动态补给、StatefulSet控制器
  • oracle系统查询~3
  • Mybatis源码(九)— chche
  • 回溯法--N皇后问题
  • ajax请求
  • K8S系列之污点和容忍度详细分析
  • 【算法】Minimum Moves to Move a Box to Their Target Location 推箱子
  • 决策引擎平台建设方案
  • SpringBoot Starter 作用及原理
  • 【rust】| 05——语法基础 | 流程控制
  • 解决Makefile: recipe for target ‘xxx‘ failed
  • 小黑子—多媒体技术与运用基础知识三:数字图形图像处理技术
  • Nginx实现ChatGPT API代理
  • FileNotFoundError: [Errno 2] No such file or directory: ‘dot‘
  • 【分布族谱】正态分布和二项分布的关系
  • 7.设计模式之责任链模式
  • JAVA8的新特性——Stream
  • alias设置快捷键vim使用说明(解决服务器上输入长指令太麻烦的问题)
  • 英语基础句型之旅:从基础到高级
  • 十四、Zuul网关