使用Feign微服务首次访问不到的问题
来源:7-15 现有架构总结

bugcatt
2019-11-21
微服务首次启动后, 服务间首次使用feign访问会报错:
feign.RetryableException: Read timed out executing POST http://user-center/user-profile/init
可以看到,
host
位置的ip
变成了微服务名称…
但是第二次访问就成功了…
这个很致命…如果重启服务器后首次被访问的是关键业务, 就完蛋了…
求教老师, 如何解决Nacos
下注册的微服务间服务首次访问不到的问题
写回答
1回答
-
您好:
feign.RetryableException: Read timed out executing POST http://user-center/user-profile/init 可以看到, host位置的ip变成了微服务名称…
整合Ribbon后就是这样打印日志的。Ribbon会把URL中的这个名称解析成Nacos上的服务名称,然后找到对应微服务,再通过负载均衡算法计算请求哪个服务提供者实例。
--------
首次请求你超时一般是由Ribbon的懒加载导致。这个问题的解决方案有几种:
您可以参考视频6-13一节《饥饿加载》的讲解,为Ribbon配置饥饿加载。这样第一次请求会快很多,就不会超时了。
为Feign配置更长的超时时间,详见Feign自定义配置的相关章节。里面有超时怎么配置。
利用Spring Retry,实现重试,这样调用失败,会自动重试。不过要想重试,就得保证接口的幂等性。所以这种玩法成本其实比较高,视频中没有提及,另外Spring Retry也不是本套课程的知识点。如果您打算使用这种方案,可以参考我这篇文章:http://www.itmuch.com/spring-cloud-sum/spring-cloud-retry/
---------
此外,关于首次请求失败的问题,我曾经也专门写了一篇文章,也可以看看:http://www.itmuch.com/spring-cloud-feign-ribbon-first-request-fail/
112019-11-21
相似问题