SpringCloud框架基础(四)负载均衡Robbin

目录

  • 前言
  • 实现负载均衡
    • 启动两个服务实例
    • 开启负载均衡
  • 代码跟踪分析
    • 跟踪分析
  • 负载均衡策略
  • 重试机制

前言

  • 实际环境中,我们往往会开启很多个user-service的集群。此时我们获取的服务列表中就会有多个,到底该访问哪一个呢?
    • 一般这种情况下我们就需要编写负载均衡算法,在多个实例列表中进行选择。
  • Eureka中已经帮我们集成了负载均衡组件:Ribbon,简单修改代码即可使用。
    SpringCloud框架基础(四)负载均衡Robbin_第1张图片

实现负载均衡

启动两个服务实例

  1. 点击下拉菜单,选择Edit Configuration按钮
    在这里插入图片描述
  2. 点击红色下划线的按钮,复制一个UserApplication的服务提供者
    SpringCloud框架基础(四)负载均衡Robbin_第2张图片
  3. 并配置不一样的接口以免冲突
    SpringCloud框架基础(四)负载均衡Robbin_第3张图片
  4. 启动测试
    在这里插入图片描述

开启负载均衡

  • 因为Eureka中已经集成了Ribbon,所以我们无需引入新的依赖。
  1. 打开服务调用者的包,在RestTemplate的配置方法上添加@LoadBalanced注解
    SpringCloud框架基础(四)负载均衡Robbin_第4张图片
  2. 修改调用方式,不再手动获取ip和端口,而是直接通过服务名称调用
    SpringCloud框架基础(四)负载均衡Robbin_第5张图片
  3. 启动测试
  • 服务提供者
    在这里插入图片描述
  • 服务调用者
    在这里插入图片描述

代码跟踪分析

  • 为什么我们只输入了service名称就可以访问了呢?之前还要获取ip和端口。
    • 显然有人帮我们根据service名称,获取到了服务实例的ip和端口。它就是LoadBalancerInterceptor

跟踪分析

  1. 进行源码跟踪,进入LoadBalancerInterceptor
    SpringCloud框架基础(四)负载均衡Robbin_第6张图片
  2. 继续跟入execute方法:发现获取了8082端口的服务
    SpringCloud框架基础(四)负载均衡Robbin_第7张图片

负载均衡策略

  • Ribbon默认的负载均衡策略是简单的轮询
  • 想要修改负载均衡策略的方式,SpringBoot也帮我们提供了修改负载均衡规则的配置入口:
    • 格式是:{服务名称}.ribbon.NFLoadBalancerRuleClassName,值就是IRule的实现类。
user-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

重试机制

  • Spring Cloud 整合了Spring Retry 来增强RestTemplate的重试能力,当一次服务调用失败后,不会立即抛出一次,而是再次重试另一个服务。
  • 只需要简单配置即可实现Ribbon的重试:
spring:
  cloud:
    loadbalancer:
      retry:
        enabled: true # 开启Spring Cloud的重试功能
user-service:
  ribbon:
    ConnectTimeout: 250 # Ribbon的连接超时时间
    ReadTimeout: 1000 # Ribbon的数据读取超时时间
    OkToRetryOnAllOperations: true # 是否对所有操作都进行重试
    MaxAutoRetriesNextServer: 1 # 切换实例的重试次数
    MaxAutoRetries: 1 # 对当前实例的重试次数
  • 需要引入依赖
<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
</dependency>

你可能感兴趣的:(SpringCloud)