spring + quartz 动态添加job的问题

发布于 2021-11-24 04:23:12 字数 281 浏览 827 评论 10

产品提了一个可以动态添加报警服务的需求,之前的报警任务都是配置在spring的配置文件中写死的,现在要求可以动态添加、修改、删除,这几天在网上查了一下 spring 3.1 (及以上)+ quartz 2.0(以上)版本 可以支持动态添加,入库(服务重启后可以从数据库中读取任务) , 但是遇到一个问题,我们的服务是同时部署在2台服务器上的,为了保持负载均衡,这样就导致在动态添加job的时候 就不能确定请求落在哪台服务器上,导致了一个不一致的问题,而且如果服务重启,2台服务器同时从数据库中读取任务,就导致任务多次执行的问题,大家有没有什么好的方法解决这个问题

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

情场扛把子 2021-11-29 23:10:25

2.x版本 已经自带集群功能

http://quartz-scheduler.org/documentation/quartz-2.x/configuration/ConfigJDBCJobStoreClustering

惜醉颜 2021-11-29 23:10:23

quartz有他的持久化的方案的吧,看起来有点复杂(懒得大改),所以自己参考资料写了一个简单的,根据数据库锁保证只有同一时间只有一台服务器跑(多台服务器时间不一致那就可能会跑多次,但不会影响业务),加了两张表一张日志,一张job表

支持手动加载(作用不大...),手动运行(感觉唯一有价值的)

猫九 2021-11-29 22:51:44

配置文件可以做成一个服务器有任务的,另一个没有,但是在增删改查任务的时候 发送请求的时候 并不能确定请求是落在哪个服务器上的,因为在服务器之前有个nginx做了负载均衡,所以请求有可能落在没有任务的服务器上

清欢 2021-11-29 22:49:06

回复
前台页面控制了权限,只有有权限的服务器才能删除任务,和负载没关系。

不再见 2021-11-29 22:22:20

在页面控制下添加任务功能的权限,只有开启任务的服务器能动态添加任务,关闭任务等操作。

刘备忘录 2021-11-29 21:49:58

搞个配置文件 控制下 启动定时任务的开关,一台服务器 开启 ,运行定时任务,一台服务器 关闭定时任务。然后,增加定时任务日志,通过日志来监控 定时任务的直行状态。

躲猫猫 2021-11-29 20:23:39

这种方案是最好的,但是产品那关过不了

像你 2021-11-29 06:24:04

回复
那可以通过2个服务的JOB加入到一组信息监听里,如果到时间,从监听中去一个JOB执行。大概的一个思路。可以参考jgroups的状态传输。

怎言笑 2021-11-29 06:05:33

回复
或者简单除暴的,在copy一个应用启动,这个应用就负责JOB,哈哈。

悟红尘 2021-11-28 09:40:45

把job独立成服务模块。业务通过RPC,http,webservice等方式访问与job模块交互。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文