`
zengshaotao
  • 浏览: 796068 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

quartz集群问题

 
阅读更多

根据需求,新增一个定时任务,单元测试通过之后,通过本地功能新增调度任务。随后发现一个诡异问题,那就是只执行一次,然后状态成为了error状态。

 

原因:本地和uat环境共用一个库,quartz被集群,但是因为代码还未发布到uat环境,导致任务在uat执行时报错,所以一定要保证quartz的job在各个环境下代码都是一致的。

 

通过观察instance_name的记录,可以发现是由服务器节点的实例名加数字组成,这时将instance的地址与集群中每个节点进行对比,可以发现,uat的instance id并不在集群节点中,但是与集群共用一个数据库

 

总结:

当使用quartz集群模式时,集群中的代码版本不一致,会出现qrtz_triggers中trigger_state的状态变为”error”的情况,是原因,在集群模式下quartz执行调度任务时是根据数据库表中的调度记录来进行的,当执行到有对应代码的节点上,不会出现问题,但是当执行到没有对应代码的节点上,就会变为”error”, 

因此在集群环境下,节点较多的时候使用quartz,需要注意每个节点的代码版本一定要保持一致

 

分享到:
评论
Global site tag (gtag.js) - Google Analytics