Load balancer does not have available server for client在Zuul中报错的解决办法

时间:2024-04-03 11:53:23

问题:

Spring Cloud 的路由Zuul,在访问对应的路由时,uri返回500错误,并且检查服务器报错:
Load balancer does not have available server for client在Zuul中报错的解决办法
Load balancer does not have available server for client在Zuul中报错的解决办法

解决办法:

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是两个独立的组件,是独立的包。

Load balancer does not have available server for client在Zuul中报错的解决办法
Load balancer does not have available server for client在Zuul中报错的解决办法
所以需要为客户端引入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包中对其做了什么处理,待查看源码再揭晓。或者哪位同仁已经知道其中奥秘,望留言分享,谢谢!