一,问题描述
springboot 2.4.3 +ribbon 2.1.7 +eureka,使用ribbon负载均衡来调用另一个微服务(user-service),当按顺序启动eureka,user-service,user-service(通过指定多个yml文件来启动相同名称的服务),再后启动ribbon-service。当所有服务成功启动后,访问ribbon中的接口来验证负载均衡时提示:java.lang.IllegalStateException: No instances available for user-service
二,问题排查
1,服务名称中不能有下划线,已排查。
2,检查服务列表中是否有需要调用的服务,已排查。
3,检查服务列表中是否有已注册的ribbon,已排查。
4,检查RibbonConfig中是否有@LoadBalanced,已排查。
经排查发现,所有的细节都检查没有出现问题,正百思不得其解时,突然在想:是不是springboot和spring cloud的版本过高引起的呢?带着疑惑降低springboot版本至2.1.4.RELEASE,调整spring cloud 版本至Greenwich.SR2。调整完毕后重启服务,经测试正常。
三,总结
spring cloud 微服务众多组件版本更新迭代较快,有时配置没有问题时不妨转换思路,调整组件的版本号来验证。