zoukankan      html  css  js  c++  java
  • springboot和quartz整合分布式多节点

      虽然单个Quartz实例能给予我们很好的任务job调度能力,但它不能满足典型的企业需求,如可伸缩性、高可靠性满足。假如你需要故障转移的能力并能运行日益增多的 Job,Quartz集群势必成为你应用的一部分了。使用 Quartz 的集群能力可以更好的支持你的业务需求,并且即使是其中一台机器在最糟的时间挂掉了也能确保所有的 Job 得到执行。一个 Quartz 集群中的每个节点是一个独立的 Quartz 应用,它又管理着其他的节点。也就是你必须对每个节点分别启动或停止。不像许多应用服务器的集群,独立的Quartz 节点并不与另一其的节点或是管理节点通信。Quartz 应用是通过数据库表来感知到另一应用的。

      Quartz集群配置很简单,本篇配置基于我的上一篇文章https://www.cnblogs.com/hhhshct/p/9707710.html,只需要更改下quartz.properties即可,如下:

    org.quartz.scheduler.instanceName = schedulerFactoryBean
    #调度器编号自动生成,集群中编号不可以重复,所以最好设成auto
    org.quartz.scheduler.instanceId = AUTO
    
    org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
    
    org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
    
    org.quartz.jobStore.tablePrefix = QRTZ_
    #开启分布式部署
    org.quartz.jobStore.isClustered = true
    #分布式节点有效性检查时间间隔,单位:毫秒
    org.quartz.jobStore.clusterCheckinInterval = 10000
    
    org.quartz.jobStore.useProperties = false
    
    org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
    
    org.quartz.threadPool.threadCount = 10
    
    org.quartz.threadPool.threadPriority = 5
    
    #配置是否启动自动加载数据库内的定时任务,默认true
    org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

      启动项目,端口号8081,作为第一个实例,可以看到之前我们加入的定时任务开始执行,修改端口号为8082,再启动项目,作为第二个实例,可以看到没有定时任务执行,然后我们手动down掉第一个实例,可以发现定时任务漂移到了我们的第二个实例,这样就避免了单点故障而造成定时任务不执行的问题。

      Quartz一点都不明确你是在同一台机器上运行所有节点,还是在不同的机器上运行所有节点。当集群是放置在不同的机器上时,我们称之为水平集群。如果所有节点是跑在同一台机器的时候,我们称之为垂直集群。对于垂直集群,存在着单点故障的问题。这对高可用性的应用来说是个坏消息,因为一旦机器宕掉了,所有的节点也就被有效的终止了。而当你运行水平集群时,一个严格的要求就是我们的时钟时间必须要同步,以免出现离奇且不可预知的行为。假如时钟没能够同步,Scheduler 实例将对其他节点的状态产生混乱,造成难以估计得麻烦。至于如何解决这个问题,后续遇到再做研究了。

  • 相关阅读:
    【Oracle】EXPDP和IMPDP数据泵进行导出导入的方法
    【Oracle】无法删除当前连接的用户
    消除SVN锁定
    提取当前目录所有文件名
    【Weblogic】domain快速启动脚本
    Spring @Transactional注解不回滚不起作用无效
    协方差与相关系数
    利用深度学习解决直播支付风控[转]
    高质量API网关组件实现
    git使用初探
  • 原文地址:https://www.cnblogs.com/hhhshct/p/9708688.html
Copyright © 2011-2022 走看看