quartz集群问题
根据需求,新增一个定时任务,单元测试通过之后,通过本地功能新增调度任务。随后发现一个诡异问题,那就是只执行一次,然后状态成为了error状态。
原因:本地和uat环境共用一个库,quartz被集群,但是因为代码还未发布到uat环境,导致任务在uat执行时报错,所以一定要保证quartz的job在各个环境下代码都是一致的。
通过观察instance_name的记录,可以发现是由服务器节点的实例名加数字组成,这时将instance的地址与集群中每个节点进行对比,可以发现,uat的instance id并不在集群节点中,但是与集群共用一个数据库
总结:
当使用quartz集群模式时,集群中的代码版本不一致,会出现qrtz_triggers中trigger_state的状态变为”error”的情况,是原因,在集群模式下quartz执行调度任务时是根据数据库表中的调度记录来进行的,当执行到有对应代码的节点上,不会出现问题,但是当执行到没有对应代码的节点上,就会变为”error”,
因此在集群环境下,节点较多的时候使用quartz,需要注意每个节点的代码版本一定要保持一致
相关推荐
qingjiuquan 2020-05-15
Julywhj 2020-01-05
景泽元的编程 2019-12-03
与卿画眉共浮生 2017-07-27
横云断岭 2012-02-03
happyfling 2019-09-20
fairystepwgl 2016-03-22
longdan0 2018-04-20
missshy 2019-03-02
burning 2016-03-11
zhongjcbill 2015-04-21
Holyn 2014-11-21
MayMatrix 2013-11-03
chenhualeguan 2013-10-16
spprogrammer 2016-03-22