应用集群(2)-避免定时任务重复执行策略

公司7代产品采用了spring Boot技术(以下简称SB,哈哈😂),SB创建定时任务也非常简单,用其自定义的注解即可,但遗憾的是,我们出其不意地集成了quartz插件(囧)。

其实quartz本身可以在集群中使用的,它提供了一种数据库锁的机制,来防止各个节点部署的quartz实例重复执行。一个Quartz集群中的每个节点是一个独立的Quartz应用。这就意味着你必须对每个节点分别启动或停止。Quartz集群中,独立的Quartz节点并不与另一其的节点或是管理节点通信,而是通过相同的数据库表来感知到另一Quartz应用的。这点挺好,但是还不够好,需要建立12张表,总觉得这种方法笨重,不采纳。

一种方法就是在每个应用的配置文件里,增加开关【是否开启定时任务】,只让一个节点运行定时任务即可,然后关于【启动任务】、【停止任务】这些接口,直接改写nginx配置,路由到启用了quartz的节点上。优点是满足需求了,但却失去了高可用性,另外现场实施还得记住哪个节点打开了开关,麻烦!

二种方法也即我推荐的方法,采用redis锁的机制防止并发,要知道 任务号+触发器+触发时间 是唯一的,这样既能满足需求又能保持高可用,而且修改幅度最小,完美!

可惜以上三种方法都没有被领导采纳,他们提出了第四种,即将定时任务独立出去,单独部署一个节点来跑quartz任务,集群中的每个节点都不再部署quartz任务,这样肯定不会重复执行,但同样失去了高可用,同样还得需多提供一台机器。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值