【Nacos无压力源码领读】(二) 集成 LoadBalancer 与 OpenFeign

上一篇文章中, 详细介绍了 Nacos 注册中心的原理, 相信看完后, 大家应该完全掌握了 Nacos 客户端是如何自动进行服务注册的, 以及 Nacos 客户端是如何订阅服务实例信息的, 以及 Nacos 服务器是如何处理客户端的注册和订阅请求的;

本文承上启下, 在订阅服务实例的基础上, 介绍如何在实例之间进行选择, 实现负载均衡; 并详细介绍了负载均衡组件 LocaBanlancer 和函数式调用组件 OpenFeign 是如何与 Nacos 注册中心进行集成的;

如果在阅读过程中对文中提到的 SpringBoot 启动过程以及扩展机制不太了解, 或者对 @Import 注解不了解, 参考这篇文章 SpringBoot启动流程与配置类处理机制详解, 附源码与思维导图, 强烈建议学习后再来读本文;

LoadBalancer

  1. Nacos 1.X 版本自动引入 Ribbon 依赖, 使用 Ribbon 做负载均衡;

  2. Nacos 2.X 版本就没有了, 因为 Ribbon 的特性已经不满足 SpringBoot 的要求;

  3. 2.X 版本可以用 SpringCloud 团队提供的 LoadBalancer 组件来做负载均衡;

<dependency>
	<groupId>org.springframework.cloudgroupId>
	<artifactId>spring-cloud-starter-loadbalancerartifactId>
dependency>

LoadBalancerClient

Spring Cloud LoadBalancer :: Spring Cloud Commons

  1. SpringCloud 定义的接口, 用于负载均衡地选择服务实例, 是SpringCloud制定的负载均衡规范;

  2. 由具体厂商去实现这个接口, 比如 Ribbon 和 LoadBanlancer 都提供了实现类;

    例如 LoadBalancer 包下 spring.factories 指定了自动配置类BlockingLoadBalancerClientAutoConfiguration;

    这个配置类向 Spring 容器注册了一个 BlockingLoadBalancerClient bean;

    这样就可以使用 @Autowired 注解获取 LoadBalancerClient并使用;

  3. 两个关键方法, chooseexecute

    choose 方法底层实现本质上仍然是调用了NamingService ( 使用 Nacos 时自然就是NacosNamingService )的 selectInstances 方法, 订阅服务并获取所有实例, 然后根据负载均衡算法选择一个实例返回;

  4. execute 方法有两个重载, 一个需要传入具体的 ServiceInstance, 一个不需要;

    调用不传 Instance 的 execute 方法时, 底层实现会先调用 choose 方法选出一个实例, 然后调用有 Instance 参数的 execute 方法完成请求发送;

  5. LoadBalancerClient 使用, 可以通过直接注入 LoadBanlancerClient对象来使用

@RequestMapping("/order/*")
public class OrderController {
   
   
    @Autowired
    LoadBalancerClient loadBalancerClient;
    

你可能感兴趣的:(SpringCloud,负载均衡,ribbon)