本人在开发spring cloud 项目过程中,由于使用了hystrix,出现了每次重启后的第一次请求会发生超时问题,特别是使用了feign的微服务之间的互相调用之后。分析原因:因为spring的懒加载问题,如果我们在第一次请求时,牵扯到多个微服务的实例化问题时,就会出现超时,因为hystrix的默认超时时间是10ms。一般来说,如果只实例化一个服务,10ms的时间是没问题的,但大多数情况下,我们的业务会涉及多个模块,这时10ms的时间就不够用了。所以我们要扩大hystrix的超时设置。
hystrix是feign默认集成的。超时的情况会发生在以下几种情况:一共有serviceA(实例化时间10ms以内),serviceB(实例化时间10ms以内),serviceC(实例化时间10ms以内)三个微服务,其中A会通过feign的远程调用B和C。如果我们先请求B和C,再请求A,这时用默认的hystrix超时配置,不会超时,因为B和C再被A调用时,已经加载到spring的context中了。但如果先请求A,这时需要先加载B和C,再加载A,那么三者一共消耗的时间肯定大于10ms。所以我们要做的就是扩大hystrix的超时时间设置,
整个网关配置中,一共存在3个超时设置。第一个是zuul路由的超时时间,第二个是hystrix超时设置,第三个是ribbon的超时时间设置,这三个应该是递减的。其中经常出问题的就是hystrix配置:hystrix.command.default.execution. isolation. thread. timeoutInMilliseconds=20000
记住它是单独拎出来的配置,别在ribbon下配置。