quartz定时任务跑了一次,但是数据修改了两次?

脑阔有个包 发布于 2018/10/08 11:39
阅读 858
收藏 0

Serverless 架构就不要服务器了?>>>

最近国庆,公司的投资理财项目出现了问题,就是产品到期回款给客户,回了两次款。我们回款的定时任务只是在当天凌晨两点执行,以前一直是正确的。10.4号那天,突然就回了两次款,后面这几天也是正确的回款。

代码运行环境:我们线上有两台linux服务器,做了负载均衡。

 查看其中一台服务器,显示定时任务就是跑了一次,但是数据库的数据实实在在的就是改了两次;另一台服务器由于外部原因,查看不了10.4号的日志了。不知道大家觉得是什原因引起的?

加载中
0
wandonson
wandonson

我最不想看到的就是这种偶发事件。。。先检查流水号,排一下是不是业务上的原因导致结算了两次。

脑阔有个包
脑阔有个包
貌似不是业务上的原因。代码跑了一年多了,第一次出现这种情况,现在也找不出原因。最大的可能性就是两台服务器都跑了定时任务,但是我们使用的quartz定时任务框架,是做了集群的啊,如果有一台服务器执行了定时任务,另一台是不会执行的。
0
kakai
kakai

也就是说 quartz 是在两台服务器上运行的? quartz 做了集群处理?如果做了集群处理,两台服务器是否做了时间同步?如果资源足够,建议将回款这块做成单独的服务,不要与其它过多的业务放在一起运行,以免引发不必要的麻烦。

脑阔有个包
脑阔有个包
回复 @银杏果果 : 重启服务不会啊!大半夜的,凌晨两点,没人重启服务的。
kakai
kakai
回复 @_王的女人 : 还有可能是在那个执行时间点后重启了某个服务器,服务器启动后做了一次补偿执行,具体核对一下quartz的配置。
脑阔有个包
脑阔有个包
quartz 做了服务器集群的,两台服务器都是阿里云的,自带时钟同步的。
0
天王盖地虎
天王盖地虎
首先,你再确认下quartz是否真的只执行一次?我以前写java的时候记得如果用tomcat部署,如果不小心部署多次就会执行任务多次任务。
脑阔有个包
脑阔有个包
因为quartz做了集群处理,正常情况下,是只有一台服务器执行定时任务的。我猜测出状况那天,应该是两台服务器都执行了定时任务,但是为什么两台都会执行定时任务呢?quarzt是做了集群处理的 啊
0
ZiFzzy
ZiFzzy

很有可能是其中一台服务重启或则其他reload了下,导致的容器又加载一次quartz。

脑阔有个包
脑阔有个包
大半夜的睡去reload去,你的意思是服务器自动重新加载吗?可是为什么会自动这样做呢
0
若水191
若水191
用linux的任务管理去单独执行重要定时任务,用代码逻辑让资金操作锁同步,数据库事务同步,只想当然的把错误推给定时任务是不合理的,业务上必须要考虑重复执行的问题
0
榆木成才
榆木成才

可能是多个任务并行导致,和我这里情况类似,不过我是在Windows上,没做集群,单任务执行,之前一直正常,突然出现偶尔重复的操作,后来发现是单次任务执行中一次性拉取的数据过多,数据处理中有延时操作,导致超过了任务时间间隔,该次任务还没有完成,下一次任务已经开始了,又拉取了重复数据出来

返回顶部
顶部