本系列代码地址:https://github.com/HashZhang/…
咱们应用 Spring Cloud 官网举荐的 Spring Cloud LoadBalancer 作为咱们的客户端负载均衡器。
Spring Cloud LoadBalancer 背景
Spring Cloud LoadBalancer 是一个客户端负载均衡器,相似于 Ribbon,然而因为 Ribbon 曾经进入保护模式,并且 Ribbon 2 并不与 Ribbon 1 互相兼容,所以 Spring Cloud 全家桶在 Spring Cloud Commons 我的项目中,增加了 Spring cloud Loadbalancer 作为新的负载均衡器,并且做了向前兼容,就算你的我的项目中持续用 Spring Cloud Netflix 套装(包含 Ribbon,Eureka,Zuul,Hystrix 等等)让你的我的项目中有这些依赖,你也能够通过简略的配置,把 ribbon 替换成 Spring Cloud LoadBalancer。
负载均衡器在哪里应用?
Spring Cloud 中外部微服务调用默认是 http 申请,次要通过上面三种 API:
- RestTemplate:同步 http API
- WebClient:异步响应式 http API
- 三方客户端封装,例如 openfeign
如果我的项目中退出了 spring-cloud-loadbalancer 的依赖并且配置启用了,那么会主动在相干的 Bean 中退出负载均衡器的个性。
- 对于 RestTemplate,会主动对所有
@LoadBalanced
注解润饰的 RestTemplate Bean 减少 Interceptor 从而加上了负载均衡器的个性。 - 对于 WebClient,会主动创立
ReactorLoadBalancerExchangeFilterFunction
,咱们能够通过退出ReactorLoadBalancerExchangeFilterFunction
会退出负载均衡器的个性。 - 对于三方客户端,个别不须要咱们额定配置什么。
这些应用的示例,会在咱们系列降级完最初的测试局部看到。
Spring Cloud LoadBalancer 构造简介
系列之前的文章咱们提到了 NamedContextFactory,Spring Cloud LoadBalancer 这里也是应用了这个机制实现了不同微服务应用不同的 Spring Cloud LoadBalancer 配置。相干外围实现是 @LoadBalancerClient
和 @LoadBalancerClients
这两个注解,以及 NamedContextFactory.Specification
的实现 LoadBalancerClientSpecification
,NamedContextFactory
的实现 LoadBalancerClientFactory
。如下图所示:
- 能够通过
loadbalancer.client.name
这个属性获取以后要创立的 Bean 是哪个微服务的 -
能够晓得默认配置是
LoadBalancerClientConfiguration
,再查看它外面的源代码咱们能够晓得次要初始化两个 Bean:- ReactorLoadBalancer,负载均衡器,因为有
@ConditionalOnMissingBean
所以能够被替换,这就是咱们的扩大点 - ServiceInstanceSupplier,提供实例信息的 Supplier,因为有
@ConditionalOnMissingBean
所以能够被替换,这就是咱们的扩大点
- ReactorLoadBalancer,负载均衡器,因为有
- Specification 为 LoadBalancerSpecification,再剖析其调用能够晓得,能够通过
@LoadBalancerClient
和@LoadBalancerClients
在LoadBalancerClientConfiguration
的根底上额定指定配置。
咱们这一节简要介绍了 Spring Cloud LoadBalancer 的应用场景,以及结构设计和扩大点。下一节咱们将详细分析 Spring Cloud LoadBalancer 的源代码来了解其中的原理。
微信搜寻“我的编程喵”关注公众号,每日一刷,轻松晋升技术,斩获各种 offer: