建设网站过程视频,云主机和云虚拟主机,设计友好的网站,做娱乐网站被坑需求背景描述#xff1a;
我有一个温湿度数据采集的物联网系统#xff0c;每个租户都需要定时执行若干种任务#xff0c; 不同的租户#xff0c; 他定时执行的间隔不一样 #xff0c;比如
A租户#xff0c;数据保存间隔60秒#xff0c;数据是否超限的轮询间隔是是600…需求背景描述
我有一个温湿度数据采集的物联网系统每个租户都需要定时执行若干种任务 不同的租户 他定时执行的间隔不一样 比如
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日临时思考记录
每个任务类型的执行队列那么多行怎么判断是否执行完成了一轮是个问题是否需要在队列表中加执行顺序。或者是否要考虑再加一个任务执行记录表记录执行了哪些任务。