springcloud-⾃定义实现负载均衡(五)
实现负载均衡的⽅式
源码探究
@LoadBalanced注解只是开启负载均衡功能,⽽负载均衡的核⼼实现类是IRule。
package comflix.loadbalancer;springcloud和springboot
public interface IRule {
Server choose(Object var1);
//设置实现负载均衡的⽅式
void setLoadBalancer(ILoadBalancer var1);
ILoadBalancer getLoadBalancer();
}
IRule实现类:代表了不同的负载均衡⽅式
RoundRobinRule 轮询策略
RandomRule 随机策略
AvailabilityFilteringRule :会先过滤掉,跳闸,访问故障的服务~,对剩下的进⾏轮询~
RetryRule :会先按照轮询获取服务~,如果服务获取失败,则会在指定的时间内进⾏,重试
其它策略实现负载均衡
轮询策略是默认的策略,只需要加上@LoadBalanced注解就可以实现了。其它策略需要我们再进⾏⼀些
配置
config
package fig;
import comflix.loadbalancer.IRule;
@Configuration
//@Configuration ... 相当于spring中的配置⽂件 l⽂件
public class ConfigBean {
@Bean
@LoadBalanced //配置负载均衡实现RestTemplate
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
@Bean
public IRule myRule(){
return new RandomRule();
}
}
此时我们再从consumer模块访问provider:如访问接⼝localhost/consumer/dept/get/1 。我们发现访问的数据库是随机的没有规律的。[上⾯的配置就从默认的轮询策略到了随机策略实现负载均衡了]
⾃定义负载均衡策略
从官⽅⽂档我们可以看到⾃定义的的负载均衡策略类不能在主启动类的扫描包下,如我的程序定义的包结构如下:
config 注意包的路径
package ule;
import comflix.loadbalancer.IRule;
@Configuration
public class MyRules {
@Bean
public IRule myRule(){
return new RandomRule();
}
}
//这⾥我只是想演⽰⾃定义策略的定义思路,我还是return new RandomRule();使⽤的随机策略。
//我们可以⾃定义⼀个类模仿随机策略,然后return new myRandomRule()就实现⾃定义了。(详细步骤略)主启动类使⽤⾃定义的⽅式我们需要使⽤@RibbonClient注解
package sumer;
import ule.MyRules;
@SpringBootApplication
@EnableEurekaClient
//在微服务启动的时候就能加载⾃定义的负载均衡策略
//name表⽰consumer负载均衡调⽤的服务注册到Eureka的名称
//configuration 表⽰⾃定从策略的配置类
@RibbonClient(name = "SPRINGCLOUD-PROVIDER-DEPT",configuration = MyRules.class)
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
然后访问:结果也是随机访问了不同的provider服务
参考教程:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。