ribbon中自定义负载均衡算法
Spring Cloud也允许开发人员声明额外的配置(在RibbonClientConfiguration之上)-@RibbonClient来取得客户端的全部控制权。例如:
@Configuration
@RibbonClient(name = "foo", configuration = FooConfiguration.class)
public class TestConfiguration {
}
本例中,客户端由已在RibbonClientConfiguration中的组件以及FooConfiguration中的任意组件组成(后者通常覆盖前者)。
警告 FooConfiguration必须有@Configuration,但注意它并不在主应用上下文的@ComponentScan中,否则它会被所有的@RibbonClients分享(意思就是覆盖所有客户端的默认值)。如果开发人员使用@ComponentScan(或@SpringBootApplication),那就必须采取措施避免被覆盖到(例如将其放入一个独立的,不重叠的包中,或以@ComponentScan指明要扫描的包。
引入pom依赖
<!--引入ribbon-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<!--引入erueka-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
配置erueka
# 配置eureka
eureka:
client:
register-with-eureka: false # 不向eureka注册自己
service-url: # 获取服务的地址
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
在主启动类上开启服务
@SpringBootApplication
@EnableEurekaClient // eureka客户端
@RibbonClient(name = "SPRINGCLOUD-PROVIDER-DEPT",configuration = MyRule.class )
public class DeptConsumer {
public static void main(String[] args) {
SpringApplication.run(DeptConsumer.class,args);
}
}
创建配置类
注意配置类存放的包,不能跟启动类平级
在MyRule
类中进行springboot配置类的声明
@Configuration // 表明其为基本的配置类
public class MyRule {
@Bean // 把组件放入ioc容器中
public IRule myrule(){
return new MyRandomRule();
}
}
定义自己的类MyRule
实现负载均衡算法,自定类应该继承父类AbstractLoadBalancerRule
(接口IRule
的实现类都继承了该类)