springcloud使用ribbon报No instances available for SPRINGCLOUD-PROVIDER....

报错信息与配置:

报错信息:

springcloud使用ribbon报No instances available for SPRINGCLOUD-PROVIDER...._第1张图片

 yml文件:

springcloud使用ribbon报No instances available for SPRINGCLOUD-PROVIDER...._第2张图片

 pom.xml配置

springcloud使用ribbon报No instances available for SPRINGCLOUD-PROVIDER...._第3张图片

原因一:

 有些人报错的原因是开始做单体Eureka的时候并没有开启注册于发现功能,导致在进行集群配置的时候无法找到

fetch-registry: 检索服务选项,当设置为True(默认值)时,会进行服务检索,注册中心不负责检索服务。

register-with-eureka: 服务注册中心也会将自己作为客户端来尝试注册自己,为true(默认)时自动生效

eureka.client.serviceUrl.defaultZone是一个默认的注册中心地址。配置该选项后,可以在服务中心进行注册。

所以一般情况下,当我们设置服务为注册中心时,需要关闭eureka.client.fetch-registry与eureka.client.register-with-eureka,在做注册中心集群的时候,register-with-eureka必须打开,因为需要进行相互注册,不然副本无法可用。

原因二: 

首先我们查看一下依赖树:

springcloud使用ribbon报No instances available for SPRINGCLOUD-PROVIDER...._第4张图片

springcloud使用ribbon报No instances available for SPRINGCLOUD-PROVIDER...._第5张图片 

发现里面有很多重复的依赖。因为spring-cloud-starter-netflix-eureka-client集成了ribbon,有兴趣的人可以使用mvn dependency:tree分析一下 jar包引用关系,若需要单独使用ribbon可以排除掉Eureka的引用,所以我们在pom文件中导入的

   
          org.springframework.cloud
          spring-cloud-starter-netflix-ribbon
          2.2.9.RELEASE
      

 依赖包反而鸡肋了,这也是我这里报错的原因

解决办法很简单:因为Eureka已经继承了ribbon,将我们自己添加的jar包去掉就行了,运行成功!

你可能感兴趣的:(spring全家桶,java,maven)