Eureka出现No instances available for xxx的五种解决方案(不能解决你骂我)
1、首先我們都知道Eureka中進(jìn)行服務(wù)的消費(fèi)有三種方式
1、DiscoveryClient:通過元數(shù)據(jù)獲取服務(wù)信息
2、LoadBalancerClinet:Ribbon負(fù)載均衡器
3、@LoadBalanced:通過注解開啟Ribbon的負(fù)載均衡器
2、出現(xiàn)以上的錯(cuò)誤的原因是有五種可能情況
第一種
當(dāng)你使用LoadBalancerClient方式時(shí),沒有去掉@LoadBalanced注解;導(dǎo)致兩種方式?jīng)_突。
以下為錯(cuò)誤實(shí)例
@Configuration public class ConsumerConfig {@Bean@LoadBalancedpublic RestTemplate getRestTemplate() {return new RestTemplate();} } public List<Product> getProductListByLoadBalancerClient() {StringBuffer sb = null;ServiceInstance instance = loadBalancerClient.choose("service-provider");if (instance == null) {return null;}sb = new StringBuffer();sb.append("http://"+instance.getHost()+":"+instance.getPort()+"/product/list");ResponseEntity<List<Product>> exchange = restTemplate.exchange(sb.toString(), HttpMethod.GET, null, new ParameterizedTypeReference<List<Product>>() {});return exchange.getBody();}解決方法:單獨(dú)使用其中一種方式,不要都碼上去
第二種
使用@LoadBalanced注解方式時(shí),需要這個(gè)類需要我們通過@Bean注入加上@LoadBanlance
將下面的代碼加入到啟動(dòng)類或者Configuration類中,將其注入到容器中。
解決方法:如上面代碼所示
第三種
導(dǎo)入了兩個(gè)依賴spring-cloud-starter-netflix-eureka-client 和 spring-cloud-starter-netflix-ribbon造成沖突
因?yàn)閟pring-cloud-starter-netflix-eureka-client 已經(jīng)默認(rèn)集成了 spring-cloud-starter-netflix-ribbon
演示錯(cuò)誤做法:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-netflix-ribbon</artifactId><version>2.1.4.RELEASE</version></dependency>解決方法:去掉spring-cloud-netflix-ribbon依賴即可
第四種
服務(wù)直接的調(diào)用,如果要使用服務(wù)名進(jìn)行調(diào)用,應(yīng)該使用下面這個(gè)spring.application.name的值進(jìn)行訪問
第五種
錯(cuò)誤原因是沒有進(jìn)行服務(wù)發(fā)現(xiàn),導(dǎo)致使用RestTemplate的時(shí)候始終找不到服務(wù)地址。
解決方式就是在服務(wù)提供者的啟動(dòng)類上加上@EnableDiscoveryClient注解然后重啟服務(wù)提供者,目的就是讓這個(gè)服務(wù)能夠被發(fā)現(xiàn),也就是消費(fèi)者使用RestTemplate去調(diào)用服務(wù)提供者的時(shí)候,去注冊中心找這個(gè)服務(wù)。
總結(jié)
以上是生活随笔為你收集整理的Eureka出现No instances available for xxx的五种解决方案(不能解决你骂我)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python打包时出现 Permissi
- 下一篇: 10分钟零基础带你入门Ribbon小项目