quartz 在集群的时候,任务会出现重复执行的情况,虽然 quartz 配置了集群,但还是会出现重复执行的情况,想了几个解决方案:
1、如果可以,就把集群中的定时任务拆解出来,单独进行部署,只存在单机服务。
2、如果单服务定时任务没办法快速处理业务,必须要集群,那么可以在业务表中加个处理状态,来判断是否处理过,如是否推送、是否关闭等等,在处理的时候进行字段判断,如果已经处理过了,就不再进行处理。因为大部分时候,集群定时任务一般都是并发执行的,可以通过分布式锁来控制,如 redis 和 zookeeper 的分布式锁。也可以通过乐观锁来处理。建议使用这个。
3、可以使用悲观锁,在 select 后面加上 for update,这样这条数据只被当前定时任务获取到,这个方案的缺点是:这条数据被锁住了,在定时任务没有执行完之前,其他应用都没办法获取到这条数据,降低了吞吐量。不建议使用
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于