现在有一个定时任务,查询本地后然后在用本地查询出的数据去调用第三方接口(在循环里调用),由于数据量大,可能会导致定时任务卡死,不执行,现要优化这个定时,优化到不会卡死的地步,请问怎么优化这个定时呢?
CountDownLatch
能满足这个需求。我前几天记录了一篇文章跟你这个场景挺相似的,就是将数据分批发送,可以参考下
优化点:
单机版的方案:
1、如果第三方接口有批量提交数据的接口,就用批量提交的接口,这样可以减少网络请求提供任务执行效率,还可以减少循环次数
2、定时任务的执行如果没有用线程池,建议优化为线程池执行任务
3、一定要合理的处理异常,不然可能因为处理过程中因为抛异常导致任务中断
集群版方案:
建议在单机版优化的基础上采用分布式的任务调动框架,可以参考:Elastic-Job https://blog.csdn.net/swzhang_01/article/details/105852638。
其核心就是把大任务分解成几个片段的小任务,集群里的每台机器都执行各自分配的小任务。可以这样理解之前1人要搬走1000块砖头要10个小时,现在分给10人去干,每人搬100块1个小时就完工。