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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示