问题:
Spring Cloud 的路由Zuul,在访问对应的路由时,uri返回500错误,并且检查服务器报错:
解决办法:
pom文件中的引用"spring-cloud-netflix-eureka-client"改为starter的 “spring-cloud-starter-netflix-eureka-client”
解决思路:
看提示错误堆栈发生在netfix client进行load balance的时候。因为netflix client 进行load balance是需要ribbon去实现的,检查看看是否有ribbon的引用。发现“spring-cloud-netflix-eureka-client”并不会包含ribbon的引用,因为eureka和ribbon是两个独立的组件,是独立的包。
所以需要为客户端引入ribbon,而且必须是ribbon-eureka这个包。直接添加ribbon注入是无效的。
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
将"spring-cloud-netflix-eureka-client"改为starter的 “spring-cloud-starter-netflix-eureka-client”,之后生效了。
尾声
至于ribbon-eureka包中对其做了什么处理,待查看源码再揭晓。或者哪位同仁已经知道其中奥秘,望留言分享,谢谢!