问题描述:springcould eureka ribbon整合时,开启了ribbon负载均衡后,消费者消费生产者提供的服务时,提示No instances available for ******
可能原因1: springcloud-porivder不是生产者配置的名称,检查被调用的服务yml配置文件中的spring.application.name: springcloud-porivder看是否与调用时使用的服务名一致,服务名称不能使用下划线,可以使用中划线。可以使用配置文件中的小写名称,也可以使用eureka注册中心的大写名称,最好统一大小写,避免其他地方出现问题
设置如下
调用如下
可能原因2:消费者缺少相应的pom依赖
<!-- ribbon(客户端继承的负载均衡) 相关 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
每个人环境不同可能需要引入的依赖不同,自行检查相关需要的依赖。我这里使用的版本如下
spring boot版本1.5.9
spring cloud版本Dalston.SR1
jdk版本1.8
可能原因3:Eureka注册中心启动类需要@EnableEurekaServer注解,服务者和消费者都需要再启动类上加入@EnableEurekaClient注解
可能原因4:消费者的application.xml中需要设置注册中心地址,并且设置在注册中心中检索服务
fetch-registry默认是true,所以可以不设置
--------------------------分割线--------------------------------------------
最好使用eureka注册中心的大写名称,因为ribbon自定义负载@RibbonClient(name = “SPRINGCLOUD-PORIVDER”, configuration = MyRule.class)规则时,这里只能写大写名称。如果后面调用是用小写名称。则自定义负载规则不生效