关于spring-cloud:SpringCloud升级之路20200x版21Spring-Cloud-LoadBalancer简介

25次阅读

共计 1715 个字符,预计需要花费 5 分钟才能阅读完成。

本系列代码地址: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 的实现 LoadBalancerClientSpecificationNamedContextFactory 的实现 LoadBalancerClientFactory。如下图所示:

  1. 能够通过 loadbalancer.client.name 这个属性获取以后要创立的 Bean 是哪个微服务的
  2. 能够晓得默认配置是 LoadBalancerClientConfiguration,再查看它外面的源代码咱们能够晓得次要初始化两个 Bean:

    1. ReactorLoadBalancer,负载均衡器,因为有 @ConditionalOnMissingBean 所以能够被替换,这就是咱们的扩大点
    2. ServiceInstanceSupplier,提供实例信息的 Supplier,因为有 @ConditionalOnMissingBean 所以能够被替换,这就是咱们的扩大点
  3. Specification 为 LoadBalancerSpecification,再剖析其调用能够晓得,能够通过 @LoadBalancerClient@LoadBalancerClientsLoadBalancerClientConfiguration 的根底上额定指定配置。

咱们这一节简要介绍了 Spring Cloud LoadBalancer 的应用场景,以及结构设计和扩大点。下一节咱们将详细分析 Spring Cloud LoadBalancer 的源代码来了解其中的原理。

微信搜寻“我的编程喵”关注公众号,每日一刷,轻松晋升技术,斩获各种 offer

正文完
 0