Spring Cloud LoadBalancer 除了基本的 ServiceInstanceListSupplier 实现之外,还提供了两种缓存实现。ServiceInstanceListSupplier 实现每次需要选择实例时都通过 DiscoveryClient 检索实例信息。
如果您在类路径中有 com.github.ben-manes.caffeine 依赖,则将 Spring Cloud LoadBalancer 将使用基于 Caffeine 的实现。
如果您使用的是 Caffeine,还可以通过在 spring.cloud.loadbalancer.cache.caffeine.spec 属性中传递自己的 Caffeine 规范来覆盖 LoadBalancer 的默认 Caffeine Cache 设置。
注意:传递您自己的 Caffeine 规范将覆盖任何其他 LoadBalancerCache 设置,包括 “常用 LoadBalancer 缓存配置” 字段,例如 ttl 和容量。
如果类路径中没有 Caffeine,则将使用 spring-cloud-starter-loadbalancer 自带的 DefaultLoadBalancerCache。
您可以通过将与 Spring Boot 兼容的 ttl 字符串值传递给 Duration 转换器语法来设置自己的 ttl 值(写入 ttl 时间后,在该时间之后的缓存应该过期),用来表示 Duration(持续时间)。设置的值将作为 spring.cloud.loadbalancer.cache.ttl 属性的值。您还可以通过设置 spring.cloud.cloud.loadbalancer.cache.capacity 属性的值来设置自己的 LoadBalancer 缓存初始容量。
默认设置包括将 ttl 设置为 35 秒,默认 initialCapacity 为 256。
您还可以通过将 spring.cloud.cloud.loadbalancer.cache.enabled 的值设置为 false 来完全禁用 loadBalancer 缓存。
注意:尽管不开启缓存对于开发和测试很有用,但其效率远低于将缓存开启,因此建议在生产环境始终启用缓存。
实例:禁用 Spring Cloud LoadBalancer 缓存,配置如下:
spring: cloud: loadbalancer: cache: # 不开启缓存 enabled: false