分布式调度中心xxl-job——The timestamp difference between admin and executor exceeds the limit.

原文链接:https://www.jianshu.com/p/cc2e94d92078

这是一个时钟同步问题

调度中心和任务执行器需要时间同步,同步时间误差需要在3分钟内,否则抛出异常

参考:com.xxl.rpc.remoting.provider.XxlRpcProviderFactory#invokeService

if (System.currentTimeMillis() - xxlRpcRequest.getCreateMillisTime() > 3*60*1000) {
    xxlRpcResponse.setErrorMsg("The timestamp difference between admin and executor exceeds the limit.");
    return xxlRpcResponse;
}
  • 时区问题
    任务由调度中心触发,按照在调度中心设置任务的cron表达式触发时,需要注意部署调度中心的机器所在的时区,按照该时区定制化cron表达式

  •  任务执行中服务宕掉问题
    调度中心完成任务下发,执行器在执行任务的过程中,如果执行器突然服务宕掉,会导致任务的执行问题在调度中心是执行中,调度中心并不会发起失败重试。即使任务设置了超时时间,执行器宕掉导致导致任务长时间未执行完成,调度中心界面也不会看到任务超时,因为任务超时是由执行器检测的并上报给调度中心的

因此遇到任务长时间未执行完成,可以关注是否发生了执行器突然服务宕掉

  •  优雅停机问题
    执行器执行任务基于线程池异步执行,当需要重启时需要注意线程池中还有未执行完成任务的问题,需要优雅停机,可以直接基于XxlJobExecutor.destroy()优雅停机,注意该方法在v2.0.2之前的版本存在bug导致无法优雅停机,v2.0.2及之后的版本才修复(参考:https://github.com/xuxueli/xxl-job/issues/727)

  •  失败重试问题
    当执行器节点部分服务不可用,例如节点磁盘损坏,但在调度中心仍然处于在线时,调度中心仍可能基于路由策略(包括故障转移策略)路由到该未下线的节点,并不断重试,不断失败,导致重试次数耗尽。所以路由策略尽量不要采用固定化策略,例如固定第一个、固定最后一个

总结

XXL-JOB上手还是比较简单,项目源码还是比较整洁,容易读懂,学习之后可以更加深入理解分布式系统设计、网络通信、多线程协同处理等知识点,推荐阅读​

补充:调度失败或调度中心挂起未执行报此错。调度中心服务器比任务容器时间相比快大于3分钟

           调度成功,调度中心日志未报错,任务总是挂起或是执行失败。任务日志报此错。任务容器时间比调度中心时间时间相比快大于3分钟

你可能感兴趣的:(xxl-job)