SpringCloud使用Loadbalancer实现客户端负载均衡
SpringCloud Loadbalancer介绍
一图开场,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