定时任务优化怎么优化呀?

现在有一个定时任务,查询本地后然后在用本地查询出的数据去调用第三方接口(在循环里调用),由于数据量大,可能会导致定时任务卡死,不执行,现要优化这个定时,优化到不会卡死的地步,请问怎么优化这个定时呢?

  1. 定时任务执行器使用多线程,这样即使一个定时任务线程卡死,仍然有其他备用线程。
  2. 如果不涉及分布式数据一致问题,那么可以将调用第三方接口的数据查询做优化,改为线程池异步调用,最终结果汇总,CountDownLatch能满足这个需求。

我前几天记录了一篇文章跟你这个场景挺相似的,就是将数据分批发送,可以参考下

  1. 第三方接口升级为批量接收
  2. 调用接口设置超时设置
  3. 检查随机数生成方式

优化点:
单机版的方案:
1、如果第三方接口有批量提交数据的接口,就用批量提交的接口,这样可以减少网络请求提供任务执行效率,还可以减少循环次数
2、定时任务的执行如果没有用线程池,建议优化为线程池执行任务
3、一定要合理的处理异常,不然可能因为处理过程中因为抛异常导致任务中断
集群版方案:
建议在单机版优化的基础上采用分布式的任务调动框架,可以参考:Elastic-Job https://blog.csdn.net/swzhang_01/article/details/105852638。
其核心就是把大任务分解成几个片段的小任务,集群里的每台机器都执行各自分配的小任务。可以这样理解之前1人要搬走1000块砖头要10个小时,现在分给10人去干,每人搬100块1个小时就完工。