Eureka出现No instances available for xxx的五种解决方案(不能解决你骂我)
1、首先我們都知道Eureka中進行服務的消費有三種方式
1、DiscoveryClient:通過元數據獲取服務信息
2、LoadBalancerClinet:Ribbon負載均衡器
3、@LoadBalanced:通過注解開啟Ribbon的負載均衡器
2、出現以上的錯誤的原因是有五種可能情況
第一種
當你使用LoadBalancerClient方式時,沒有去掉@LoadBalanced注解;導致兩種方式沖突。
以下為錯誤實例
@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();}解決方法:單獨使用其中一種方式,不要都碼上去
第二種
使用@LoadBalanced注解方式時,需要這個類需要我們通過@Bean注入加上@LoadBanlance
將下面的代碼加入到啟動類或者Configuration類中,將其注入到容器中。
解決方法:如上面代碼所示
第三種
導入了兩個依賴spring-cloud-starter-netflix-eureka-client 和 spring-cloud-starter-netflix-ribbon造成沖突
因為spring-cloud-starter-netflix-eureka-client 已經默認集成了 spring-cloud-starter-netflix-ribbon
演示錯誤做法:
<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依賴即可
第四種
服務直接的調用,如果要使用服務名進行調用,應該使用下面這個spring.application.name的值進行訪問
第五種
錯誤原因是沒有進行服務發現,導致使用RestTemplate的時候始終找不到服務地址。
解決方式就是在服務提供者的啟動類上加上@EnableDiscoveryClient注解然后重啟服務提供者,目的就是讓這個服務能夠被發現,也就是消費者使用RestTemplate去調用服務提供者的時候,去注冊中心找這個服務。
總結
以上是生活随笔為你收集整理的Eureka出现No instances available for xxx的五种解决方案(不能解决你骂我)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python打包时出现 Permissi
- 下一篇: 10分钟零基础带你入门Ribbon小项目