万字长文浅析微服务Ribbon负载均衡源码(二):负载均衡器
版本
作者:韩数
Github:https://github.com/hanshuaikang
完成日期:2019-06-16日
jdk:1.8
springboot版本:2.1.3.RELEASE
SpringCloud版本:Greenwich.SR1
声明:
身为一个刚入门的计算机菜佬,阅读源码自然离不开参考书籍和视频的引导,本篇文章的分析过程中"严重"借鉴了 翟永超 前辈的《SpringCloud微服务实战》这本书籍,在这里也向准备学习微服务的小伙伴们强烈推荐这本书,大家可以把这篇文章理解为《SpringCloud微服务实战》Ribbon部分的精简版和电子版,因为个人水平的原因,很多问题不敢妄下定论,以免误人子弟,所有书上很多内容都是精简过后直接放上去的,由于SpringCloud已经迭代到了Greenwich.SR1版本,Ribbon也和书上有了略微的差别,本篇文章的源码采用的是Ribbon新版本,同时,因为时间原因,有很多额外的子类实现并没有完全顾上,例如PredicateBasedRule类的ZoneAvoidanceRule和AvailabilityFilteringRule 感兴趣的读者可以买《SpringCloud微服务实战》这本书细看,同时强烈推荐小马哥的微服务直播课系列《小马哥微服务实战》。
致谢
翟永超:博客地址:
http://blog.didispace.com/aboutme/
小马哥: Java 微服务实践 - Spring Boot / Spring Cloud购买链接:
https://segmentfault.com/ls/1650000011387052
电子版及相关代码下载(欢迎Star)
Github:https://github.com/hanshuaikang/Spring-Note
微信公众号:码上marson
负载均衡器
AbstractLoadBalancer 类
import java.util.List;
public abstract class AbstractLoadBalancer implements ILoadBalancer {
//一个关于服务实例的分组枚举类,定义了三种不同的级别
public enum ServerGroup{
ALL,
STATUS_UP,
STATUS_NOT_UP
}
/**
* 选择一个服务实例,key为null,忽略key的条件判断
*/
public Server chooseServer() {
return chooseServer(null);
}
/**
* 根据不同的分组类型来选择返回不同的服务实例的列表
*/
public abstract List<Server> getServerList(ServerGroup serverGroup);
/**
* 获取与负载均衡器相关的统计信息
*/
public abstract LoadBalancerStats getLoadBalancerStats();
}
相关文章