没有IRule接口咋办啊 加Ribbon依赖会报错的 eureka3.0以上版本包括了Ribbon 但没有Ribbon依赖就没有IRule接口啊
//配置负载均衡实现RestTemplate
//负载均衡有个核心的实现 IRule(路由网关)
// RoundRobinRule : 轮询 (默认的就是轮询)
// RandomRule : 随机
// AvailabilityFilteringRule : 会先过滤掉 跳闸、访问故障的服务,对剩下的进行轮询
// RetryRule : 会先按照轮询获取服务,如果服务获取失败,则会在指定的时间内重试
@Bean
@LoadBalanced //Ribbon
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
@Bean
public IRule myRule(){
}
<!--Ribbon-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.cloud</groupId>-->
<!-- <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>-->
<!-- <version>2.2.10.RELEASE</version>-->
<!-- </dependency>-->
<!--加入eureka依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
就是没有找到IRule接口,因为没导Ribbon依赖,但eureka3.0以上版本包括了Ribbon,再导入Ribbon依赖运行后连接其他服务会报错
eureka3.0以上版本包括了Ribbon 但没有Ribbon依赖就没有IRule接口 加入了Ribbon依赖IRule接口才出来,但运行后连接其他服务会报错
用IRule接口自定义Ribbon负载均衡
如果在使用自定义负载均衡时报错,大概率是因为版本问题。springcloud在2020.0.0之后,移除掉了netflix-ribbon 使用eureka-client中的loadbalancer,使用自定义负载均衡不使用IRule接口。官方文档上有写,可以写一个配置类,可以与启动类同级
public class CustomerLoadBalancerConfiguration {
@Bean
ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,
LoadBalancerClientFactory loadBalancerClientFactory) {
String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
return new RandomLoadBalancer(loadBalancerClientFactory
.getLazyProvider(name, ServiceInstanceListSupplier.class),
name);
}
}
然后在注入resttemplate的类中,使用注解@LoadBalancerClient
@LoadBalancerClient(name = "这里写提供者名称",configuration = CustomerLoadBalancerConfiguration.class)
具体什么软件什么环境
eureka还有3.0版本吗