Ribbon调用原理分析,负载均衡策略以及自定义负载算法
LD is tigger forever,CG are not brothers forever, throw the pot and shine.
Modesty is not false, solid is not naive, treacherous but not deceitful, stay with good people, and stay away from poor people.
talk is cheap, show others the code,Keep progress,make a better result.
目录
概述
架构特性
设计思路
实现思路分析
Ribbon负载均衡策略
拓展实现
单独使用Ribbon
因为往往Ribbon配合Eureka使用的,往往也有第三方服务没有注册到Eureka Server,但也部署了多个实例,也需要进行负载均衡,这时可以在服务消费者的配置文件中进行如下方式配置,实现负载均衡
自定义负载均衡算法
这个自定义的类不能放在@ComponentScan所扫描的当前包以及子包下,否则我们自定义的这个配置类就会被所有的Ribbon客户端所共享,也就是我们达不到特殊化指定的目的了。
因为主启动类已经有ComponentScan,这个注解了,所以说不能放在和主启动类同包下。
注入bean
如果想使用某个自定义算法则注入到bean中即可。
/**
* 自定义负载均衡算法
*/
// @Configuration -- 通过注解@RibbonClient为特定的服务配置负载均衡策略,
// 这时候该注解需去掉,否则会执行两次RandomRule()
public class MySelfRule {
@Bean
public IRule myRule() {
//return new RoundRobinRule();//轮询算法
//return new RandomRule();//随机算法
return new RandomRule_ZY();
}
}
添加ribbon注解
@SpringBootApplication
@EnableEurekaClient
@RibbonClient(name = "MICROSERVICECLOUD-DEPT", configuration = MySelfRule.class)
public class DeptConsumer80_App {
public static void main(String[] args) {
SpringApplication.run(DeptConsumer80_App.class, args);
}
}
特别注意的是@RibbonClient(name = “MICROSERVICECLOUD-DEPT”, configuration = MySelfRule.class)
name指定针对哪个服务 进行负载均衡,而configuration指定负载均衡的算法具体实现类
相关工具如下:
无
实验效果:(解决思路)
分析:
小结:
主要讲述了一些Ribbon的负载均衡,里面有许多不足,请大家指正~
参考资料和推荐阅读
1.链接: 参考资料.