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

news/2024/5/19 22:42:10 标签: .netcore

需求背景描述:

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

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后台工作者,

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



http://www.niftyadmin.cn/n/314441.html

相关文章

Java-Redis缓存穿透,击穿,雪崩和布隆算法

Java-Redis缓存穿透,击穿,雪崩和布隆算法 1.缓存穿透概念:2.如何解决缓存穿透:3.什么是缓存击穿?4.什么是缓存雪崩?5.导致缓存雪崩的原因:6.缓存穿透,缓存击穿,缓存雪崩的区别: 1.缓存穿透概念: 当一个用户想要查询数据时&…

爬取动态页面的数据

爬取动态页面的数据 在进行网页爬取时,我们通常会遇到两种不同的页面:静态页面和动态页面。静态页面是指内容不会改变的页面,而动态页面则是指内容可能会随时间、用户操作或其他事件而改变的页面。本文将介绍如何爬取动态页面的数据&#xf…

如何使用appuploader制作描述文件​

如何使用appuploader制作描述文件​ 承接上文我们讲述了怎么制作证书,本文我们来看下怎么制作描述文件吧。​制作描述文件前我们首先我们来添加一个测试设备,后面再制作描述文件。 1.添加测试设备​ 其中添加设备一项中,根据提示操作添加…

vue2 vuex 中使用 sortablejs 拖拽库

1.存在问题 在vue2 vuex 中直接使用 sortablejs 拖拽库会有bug 因为 sortablejs 会自动修改 html dom, 然后用户在 onUpdate 中修改数据后,vue会重新渲染. 2次修改dom 会导致dom顺序混乱(我遇到了这个问题) 2.使用vuedraggable 解决 存在问题:不能在嵌套循环中使用 npm i…

安全工程师必读 ——《安全技术工具扫盲》

安全技术 SAST - 静态应用安全测试(白盒检测)DAST - 动态应用安全测试(黑盒检测)IAST - 交互式应用安全测试(灰盒检测)RASP - 运行时应用自我保护Dependency Scanning(依赖项安全扫描&#xff…

纯手动搭建大数据集群架构_记录019_集群机器硬盘爆满了_从搭建虚拟机开始_做个200G的虚拟机---大数据之Hadoop3.x工作笔记0179

今天突然就发现,使用nifi的时候集群满了...气死了.. 而在vmware中给centos去扩容,给根目录扩容,做的时候,弄了一天...最后还是报错, 算了从头搭建一个200G的,希望这次够用吧.后面再研究一下扩容的问题. 2023-05-12 11:06:48 原来的集群的机器,硬盘太小了,扩容不知道怎么回事…

[.NET/WPF] 如何使用 CommunityToolkit.Mvvm

CommunityToolkit.Mvvm 包(又名 MVVM 工具包,以前称为 Microsoft.Toolkit.Mvvm)是一个现代、快速和模块化的 MVVM 库。 它是 .NET Community Toolkit 的一部分,并围绕以下原则构建: 独立于平台和运行时 - .NET Standa…

FreeRTOS:列表和列表项

要想看懂 FreeRTOS 源码并学习其原理,有一个东西绝对跑不了,那就是 FreeRTOS 的列表和列表项。列表和列表项是FreeRTOS的一个数据结构, FreeRTOS 大量使用到了列表和列表项,它是 FreeRTOS 的基石。要想深入学习并理解 FreeRTOS&am…