SpringCloud使用Loadbalancer实现客户端负载均衡

SpringCloud Loadbalancer介绍

sc-2020

一图开场,SpringCloud 2020 版本开始,剔除了对所有除 eureka 以外 netflix 组件的支持,其中就包括我们最常用的 ribbon hystrix 等,同时 SpringCloud 也在 spring-cloud-commons 下提供了对 loadbalancer 的实现,可以拿来代替 ribbon。

基于 RestTemplate 发送请求的交互图:

SpringCloud集成Loadbalancer

我们前面使用的spring-cloud-starter-netflix-eureka-client默认就引入了spring-cloud-starter-loadbalancer。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

1、创建RestTemplate实例

//如果是集群服务, 调用时使用了服务名请求,则必须添加@LoadBalanced注解,使用ip请求不用添加
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
    return new RestTemplate();
}

2、常用的配置

spring:
  cloud:
    # 负载均衡配置
    loadbalancer:
      ribbon:
        #禁用ribbon
        enabled: false
      cache:
        #启用本地缓存, 根据实际情况权衡
        enabled: true
        #缓存空间大小
        capacity: 1000
        #缓存的存活时间, 单位s
        ttl: 2
        #caffeine缓存的配置, 需引入caffeine依赖
        caffeine:
          #initialCapacity初始的缓存空间大小,expireAfterWrite最后一次写入后经过固定时间过期
          spec: initialCapacity=500,expireAfterWrite=5s
      health-check:
        #重新运行运行状况检查计划程序的时间间隔。
        interval: 25s
        #运行状况检查计划程序的初始延迟值
        initial-delay: 30
      retry: #需要引入Spring Retry依赖
        #该参数用来开启重试机制,默认是关闭
        enabled: true
        #切换实例的重试次数
        max-retries-on-next-service-instance: 2
        #对当前实例重试的次数
        max-retries-on-same-service-instance: 0
        #对所有的操作请求都进行重试
        retry-on-all-operations: true
        #Http响应码进行重试
        retryable-status-codes: 500,404,502

 

posted @ 2022-05-03 23:25  残城碎梦  阅读(5738)  评论(0编辑  收藏  举报