本文主要是介绍eureka timeout exception,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
部门基于spring cloud体系构建微服务架构,在使用的过程中,不同的服务,都报以下的错误,想一探究竟:
[2018-08-04 22:53:22] [ERROR] [DiscoveryClient-0] [com.netflix.discovery.TimedSupervisorTask:run:67] task supervisor timed out
java.util.concurrent.TimeoutException: null
at java.util.concurrent.FutureTask.get(FutureTask.java:205)
at com.netflix.discovery.TimedSupervisorTask.run(TimedSupervisorTask.java:63)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
分析DiscoveryClient源码发现,服务发现在初始化时,会启动两个定时任务,一个是向eureka注册,即心跳的线程,另一个是从eureka获取服务注册列表,即刷新注册列表缓存的线程,上述两个线程都是每30s执行一次,默认超时时间都为30s,所以当30s未执行完该任务是,便会抛出Timeout的异常。发送心跳的任务比较简单,一般不会超时。而获取注册列表的任务,耗时较久,所以是重点怀疑对象。
由于注册中心是所有服务通信的基础,所以部署在多个机房。而当前服务也部署在了两个机房,但当前服务有一个机房和注册中心为不同的机房,所以这个时候通信就比较耗时,往往会发生超时。
解决方案:调整client.refresh.interval的值更大一些。
这篇关于eureka timeout exception的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!