针对xxl-job定时任务调度失败,并且心跳检测msg:java.lang.RuntimeException: Network request error: Connect to ip:端口 [/ip] failed: connect timed out的问题的总结:
之前job-admin一直能正常调度任务,突然有一天调度出错了,但是不是全部出错,有的调度成功,有的调度失败,显示心跳检测未通过。调度结果如下图:
起初因为是job-admin的问题,通过对job-admin进行输出日志发现RemoteHttpJobBean该类在部署job-admin的服务器上对于某一定时的任务有时候会输出日志,有时则不会,按照官方文档讲解,RemoteHttpJobBean是所有定时任务执行调度的入口,但是某一个定时任务并未在服务器上输出RemoteHttpJobBean的打印信息,却在job_qrtz_trigger_log表中新增了一条记录,说明程序还是通过RemoteHttpJobBean执行了调度,想了很久都没有想到其中的关键。最后在job_qrtz_scheduler_state表中发现了一些端倪,因为job-admin只部署了一台服务器,应该只会有一条记录,但是在job_qrtz_scheduler_state却存在两条记录,感觉应该是这个问题导致的,后来想起来新弄了一套环境,也部署了一套job-admin,后来把新环境的job-admin停掉以后,调度就正常了。
xxl-job的表job_qrtz_scheduler_state表的记录数跟部署的job-admin的服务器有关(如果几台服务器公用一个数据库的情况下),针对一个数据库对应多个job-admin服务的情况,可以在配置文件中为不同的服务指定不同的sched_name,防止定时任务调度的时候回串套。即防止同一个sched_name对应两个实例。
PS:另外在查找问题的过程中发现有一篇关于xxl-job的调度执行过程和执行器的加载流程讲解很详细的文章,推荐给大家。https://www.jianshu.com/p/d75800b5c9f9