Spring Cloud Tencent 是腾讯开源的一站式微服务解决方案。SCT实现了Spring Cloud 标准微服务 SPI,开发者可以基于 Spring Cloud Tencent 快速开发 Spring Cloud 云原生分布式应用。
Spring Cloud Tencent 的核心依托腾讯开源的一站式服务发现与治理平台 Polaris,实现各种分布式微服务场景。
https://github.com/Tencent/spring-cloud-tencent
spring-cloud-tencent:1.6.0-Hoxton.SR12-SNAPSHOT
Spring Cloud:Hoxton.SR12
Spring Framework:5.2.22.RELEASE
【additional-spring-configuration-metadata.json】
定义 Polaris LoadBalancer 工程的配置属性,前缀为:spring.cloud.polaris.loadbalancer.*
属性名 | 备注 | 默认值 |
---|---|---|
enabled | 是否开启 Polaris 负载均衡 | true |
discoveryType | 发现服务类型 | POLARIS |
strategy | 负载均衡策略 | random |
【PolarisLoadBalancerProperties.java】
Polaris LoadBalancer 配置属性对应类,自动将配置文件中的配置转换为 Bean。
【spring.factories】
指定开启 Spring Boot 自动配置类全路径。
【PolarisLoadBalancerAutoConfiguration.java】
Polaris LoadBalancer 自动配置类
1、配置类注解、不使用 proxy bean 代理
2、启用对@ConfigurationProperties注释 Bean 的支持。
3、判断是否满足启用条件:"spring.cloud.polaris.enabled"。
4、判断是否满足启用条件:"spring.cloud.polaris.loadbalancer.enabled"。
5、配置类加载后,自动加载 RibbonAutoConfiguration.java
6、通过 @RibbonClients 注入 Polaris 客户端配置类 PolarisRibbonClientConfiguration.class。
7、将 PolarisLoadBalancerProperties、RouterAPI(通过 polarisContext Bean 创建)实例加入到 IOC 交由 Spring 进行管理。
【PolarisRibbonClientConfiguration.java】
Polaris ribbon client 配置类,注入 Polaris 自定义 ILoadBalancer 接口实现类。
【PolarisLoadBalancer.java】
Polaris 自定义路由负载均衡类。
1、继承了 DynamicServerListLoadBalancer 类,重写了 getReachableServers()、getAllServers() 两个方法。然而 getAllServers() 方法未自定义实现,直接调用了 getReachableServers() 方法。
getReachableServers() | 获取已启动且可访问的服务器。 |
---|---|
getAllServers() | 获取所有已知的服务器,包括可访问和无法访问的服务器。 |
2、PolarisLoadBalancer 构造器增加了两个自定义参数 ConsumerAPI、PolarisLoadBalancerProperties。
3、getReachableServers()
【PolarisWeightedRule.java】
Polaris 权重负载均衡实现类。
1、继承默认设置获取负载均衡实现类:AbstractLoadBalancerRule.java
2、初始化时,增加了 Polaris 路由相关 API 接口。
3、重写 choose() 方法,返回 Polaris 的服务器信息对象。
一年已经过去大半,是时候定一个小目标:阅读学习优秀的开源项目源代码。
本文是 Spring Cloud Tencent 第三篇文章,希望今年能完成整个 SCT 源代码的阅读与学习。