3. Spring Cloud LoadBalancer

Spring Cloud 为客户端负载均衡抽象和实现提供了自己的支持。对于负载均衡机制,已添加了ReactiveLoadBalancer接口,并提供了基于Round-RobinRandom的实现。为了选择来自的实例,使用了ServiceInstanceListSupplier响应式。目前,我们提供了一个利用类路径中可用的发现客户端从服务发现中检索可用实例的服务发现驱动的ServiceInstanceListSupplier实现。spring-doc.cadn.net.cn

可以通过将 false 的值设置为 spring.cloud.loadbalancer.enabled 来禁用 Spring Cloud LoadBalancer。

3.1. 在负载均衡算法之间切换

默认使用的 ReactiveLoadBalancer 实现是 RoundRobinLoadBalancer。若要切换到其他实现(针对特定服务或全部服务),您可以使用 自定义负载均衡器配置机制spring-doc.cadn.net.cn

例如,以下配置可以通过 @LoadBalancerClient 注解传递,以切换到使用 RandomLoadBalancerspring-doc.cadn.net.cn

public class CustomLoadBalancerConfiguration {

    @Bean
    ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,
            LoadBalancerClientFactory loadBalancerClientFactory) {
        String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
        return new RandomLoadBalancer(loadBalancerClientFactory
                .getLazyProvider(name, ServiceInstanceListSupplier.class),
                name);
    }
}
您作为 @LoadBalancerClient@LoadBalancerClients 配置参数传入的类,要么不应被标注为 @Configuration,要么应位于组件扫描范围之外。

3.2. Spring Cloud LoadBalancer 集成

为了方便使用 Spring Cloud LoadBalancer,我们提供了 ReactorLoadBalancerExchangeFilterFunction 可以与 WebClientBlockingLoadBalancerClient 配合使用的功能,以及一个可以与 RestTemplate 配合工作的组件。有关更多信息和用法示例,请参见以下部分:spring-doc.cadn.net.cn

3.3. Spring Cloud LoadBalancer 缓存

除了基本的 ServiceInstanceListSupplier 实现(该实现每次选择实例时都通过 DiscoveryClient 获取实例外),我们还提供了两种缓存实现。spring-doc.cadn.net.cn

3.3.1. Caffeine后端负载均衡器缓存实现

如果您在类路径中包含 com.github.ben-manes.caffeine:caffeine,将使用基于 Caffeine 的实现。有关如何配置它的信息,请参阅 LoadBalancerCacheConfiguration 部分。spring-doc.cadn.net.cn

如果您正在使用 Caffeine,还可以通过在 spring.cloud.loadbalancer.cache.caffeine.spec 属性中传递您自己的 Caffeine 配置说明 来重写 LoadBalancer 的默认 Caffeine 缓存设置。spring-doc.cadn.net.cn

警告:传递您自己的 Caffeine 规范将覆盖任何其他 LoadBalancerCache 设置,包括 通用负载均衡器缓存配置 字段,例如 ttlcapacityspring-doc.cadn.net.cn

3.3.2. 默认负载均衡器缓存实现

如果您在类路径中没有 Caffeine,将自动使用与 spring-cloud-starter-loadbalancer 一起提供的 DefaultLoadBalancerCache。有关如何配置它的信息,请参阅 LoadBalancerCacheConfiguration 部分。spring-doc.cadn.net.cn

要使用 Caffeine 而非默认缓存,请将 com.github.ben-manes.caffeine:caffeine 依赖添加到类路径中。

3.3.3. 负载均衡器缓存配置

您可以设置自己的 ttl 值(即写入后多久条目应过期的时间),以 Duration 的格式表示,方法是传入一个符合 Spring Boot StringDuration 转换器语法String
作为 spring.cloud.loadbalancer.cache.ttl 属性的值。
您还可以通过设置 spring.cloud.loadbalancer.cache.capacity 属性的值来设置负载均衡器缓存的初始容量。spring-doc.cadn.net.cn

默认设置包括 ttl 设为 35 秒,而默认的 initialCapacity256spring-doc.cadn.net.cn

您还可以通过将 spring.cloud.loadbalancer.cache.enabled 的值设置为 false 来完全禁用负载均衡器缓存。spring-doc.cadn.net.cn

虽然基本的、未缓存的实现对于原型设计和测试很有用,但其效率远低于缓存版本,因此我们建议在生产环境中始终使用缓存版本。例如,如果缓存已由 DiscoveryClient 实现(如 EurekaDiscoveryClient)完成,则应禁用负载均衡器的缓存,以避免重复缓存。
当您创建自己的配置时,如果使用 CachingServiceInstanceListSupplier,请确保将其放置在直接位于从网络获取实例的提供者之后的层级中,例如 DiscoveryClientServiceInstanceListSupplier,且在任何其他过滤提供者之前。

3.4. 基于区域的负载均衡

为启用基于区域的负载均衡,我们提供了 ZonePreferenceServiceInstanceListSupplier。我们使用 DiscoveryClient 特定的 zone 配置(例如,eureka.instance.metadata-map.zone)来选择客户端尝试筛选可用服务实例所在的区域。spring-doc.cadn.net.cn

您还可以通过设置 spring.cloud.loadbalancer.zone 属性的值来覆盖 DiscoveryClient 特定区域的配置。
目前,仅 Eureka 发现客户端被配置为设置负载均衡器区域。对于其他发现客户端,请设置 spring.cloud.loadbalancer.zone 属性。更多集成功能即将推出。
要确定检索到的 ServiceInstance 所属的区域,我们检查其元数据映射中 "zone" 键对应的值。

获取的 ZonePreferenceServiceInstanceListSupplier 过滤器会筛选实例,仅返回位于同一可用区内的实例。如果可用区为 null 或同一可用区内没有实例,则返回所有获取到的实例。spring-doc.cadn.net.cn

为了使用基于区域的负载均衡方法,您必须在自定义配置中实例化一个ZonePreferenceServiceInstanceListSupplierbean。spring-doc.cadn.net.cn

我们使用委托来处理 ServiceInstanceListSupplier 个 Bean。我们建议使用一个 DiscoveryClientServiceInstanceListSupplier 委托,将其包装在 CachingServiceInstanceListSupplier 中以利用 负载均衡器缓存机制,然后将生成的 Bean 作为参数传递给 ZonePreferenceServiceInstanceListSupplier 的构造函数。spring-doc.cadn.net.cn

您可以使用此示例配置来设置它:spring-doc.cadn.net.cn

public class CustomLoadBalancerConfiguration {

    @Bean
    public ServiceInstanceListSupplier discoveryClientServiceInstanceListSupplier(
            ConfigurableApplicationContext context) {
        return ServiceInstanceListSupplier.builder()
                    .withDiscoveryClient()
                    .withCaching()
                    .withZonePreference()
                    .build(context);
    }
}

3.5. 负载均衡器的实例健康检查

可以为负载均衡器启用定时健康检查。其中 HealthCheckServiceInstanceListSupplier 用于此目的。它会定期验证由委托方 ServiceInstanceListSupplier 提供的实例是否仍然存活,并仅返回健康的实例,除非没有健康实例——此时将返回所有检索到的实例。spring-doc.cadn.net.cn

此机制在使用 SimpleDiscoveryClient 时特别有用。对于由实际服务注册中心支持的客户端,无需使用它,因为我们查询外部服务发现后已获得健康实例。
此提供商也推荐用于每个服务实例数量较少的配置,以避免在故障实例上重试调用。
如果使用任何基于服务发现的提供商,通常无需添加此健康检查机制,因为我们可直接从服务注册中心获取实例的健康状态。
HealthCheckServiceInstanceListSupplier 依赖于由委托流(delegate flux)提供的更新实例。在极少数情况下,如果您希望使用一个不刷新实例的委托(即使实例列表可能发生变化,例如我们提供的 DiscoveryClientServiceInstanceListSupplier),您可以将 spring.cloud.loadbalancer.health-check.refetch-instances 设置为 true,从而使实例列表由 HealthCheckServiceInstanceListSupplier 进行刷新。您还可以通过修改 spring.cloud.loadbalancer.health-check.refetch-instances-interval 的值来调整重新获取(refetch)间隔,并通过将 spring.cloud.loadbalancer.health-check.repeat-health-check 设置为 false 来禁用额外的健康检查重复执行——因为每次实例重新获取都会触发一次健康检查。

HealthCheckServiceInstanceListSupplier 使用以 spring.cloud.loadbalancer.health-check 开头的属性。您可以为调度器设置 initialDelayinterval。您可以通过设置 spring.cloud.loadbalancer.health-check.path.default 属性的值来指定健康检查 URL 的默认路径。您还可以通过设置 spring.cloud.loadbalancer.health-check.path.[SERVICE_ID] 属性的值,为任意特定服务设置一个具体值,其中将 [SERVICE_ID] 替换为您服务的正确 ID。如果未指定 [SERVICE_ID],则默认使用 /actuator/health。如果 [SERVICE_ID] 被设置为 null 或为空,则不会执行健康检查。您还可以通过设置 spring.cloud.loadbalancer.health-check.port 属性的值来自定义健康检查请求的端口;若未设置,则使用服务实例所处的端口。spring-doc.cadn.net.cn

如果您依赖默认路径(/actuator/health),请确保将 spring-boot-starter-actuator 添加到您合作者的依赖项中,除非您计划自行添加此类端点。

为了使用健康检查调度器方法,您必须在自定义配置中实例化一个HealthCheckServiceInstanceListSupplierbean。spring-doc.cadn.net.cn

我们使用委托来处理 ServiceInstanceListSupplier 个 Bean。我们建议在 HealthCheckServiceInstanceListSupplier 的构造函数中传入一个 DiscoveryClientServiceInstanceListSupplier 委托。spring-doc.cadn.net.cn

您可以使用此示例配置来设置它:spring-doc.cadn.net.cn

public class CustomLoadBalancerConfiguration {

    @Bean
    public ServiceInstanceListSupplier discoveryClientServiceInstanceListSupplier(
            ConfigurableApplicationContext context) {
        return ServiceInstanceListSupplier.builder()
                    .withDiscoveryClient()
                    .withHealthChecks()
                    .build(context);
        }
    }
对于非响应式堆栈,使用 withBlockingHealthChecks() 创建此提供商。

spring-doc.cadn.net.cn

您也可以传递自己的 WebClientRestTemplate 实例用于检查。spring-doc.cadn.net.cn

HealthCheckServiceInstanceListSupplier 具有基于 Reactor Flux replay() 的自身缓存机制。因此,如果正在使用它,您可能希望跳过用 CachingServiceInstanceListSupplier 包装该提供商。
当您创建自己的配置时,HealthCheckServiceInstanceListSupplier,请确保将其放置在直接位于从网络检索实例的提供商之后的层级中,例如,DiscoveryClientServiceInstanceListSupplier,并在任何其他过滤提供商之前。

3.6. 负载均衡器的同一实例优先级

您可以以某种方式配置负载均衡器,使其在先前选择的实例可用时优先选择该实例。spring-doc.cadn.net.cn

为此,您需要使用 SameInstancePreferenceServiceInstanceListSupplier。您可以通过将 spring.cloud.loadbalancer.configurations 的值设置为 same-instance-preference 来配置它,也可以提供您自己的 ServiceInstanceListSupplier Bean —— 例如:spring-doc.cadn.net.cn

public class CustomLoadBalancerConfiguration {

    @Bean
    public ServiceInstanceListSupplier discoveryClientServiceInstanceListSupplier(
            ConfigurableApplicationContext context) {
        return ServiceInstanceListSupplier.builder()
                    .withDiscoveryClient()
                    .withSameInstancePreference()
                    .build(context);
        }
    }
这也是 Zookeeper StickyRule 的替代方案。

3.7. 基于请求的负载均衡器粘性会话

您可以配置负载均衡器,使其优先选择在请求 Cookie 中提供 instanceId 值的实例。目前,如果请求是通过 ClientRequestContextServerHttpRequestContext 传递到负载均衡器的,则我们支持此功能,其中 ClientRequestContextServerHttpRequestContext 分别由 SC 负载均衡器交换过滤器函数和过滤器使用。spring-doc.cadn.net.cn

为此,您需要使用 RequestBasedStickySessionServiceInstanceListSupplier。您可以通过将 spring.cloud.loadbalancer.configurations 的值设置为 request-based-sticky-session 来配置它,或者提供您自己的 ServiceInstanceListSupplier Bean —— 例如:spring-doc.cadn.net.cn

public class CustomLoadBalancerConfiguration {

    @Bean
    public ServiceInstanceListSupplier discoveryClientServiceInstanceListSupplier(
            ConfigurableApplicationContext context) {
        return ServiceInstanceListSupplier.builder()
                    .withDiscoveryClient()
                    .withRequestBasedStickySession()
                    .build(context);
        }
    }

为此功能,最好在将请求转发之前更新所选的服务实例(该实例可能与原始请求 Cookie 中的实例不同,如果该 Cookie 不可用的话)。要做到这一点,请将 spring.cloud.loadbalancer.sticky-session.add-service-instance-cookie 的值设置为 truespring-doc.cadn.net.cn

默认情况下,Cookie 的名称为 sc-lb-instance-id。您可以通过修改 spring.cloud.loadbalancer.instance-id-cookie-name 属性的值来更改它。spring-doc.cadn.net.cn

此功能当前仅支持基于 WebClient 的负载均衡。

3.8. Spring Cloud LoadBalancer 提示

Spring Cloud LoadBalancer 允许您设置 String 个提示,这些提示会传递给负载均衡器(LoadBalancer)内的 Request 对象,并且之后可在支持它们的 ReactiveLoadBalancer 实现中使用。spring-doc.cadn.net.cn

您可以设置一个默认提示,用于所有服务,方法是设置 spring.cloud.loadbalancer.hint.default 属性的值。您也可以为任意特定服务设置一个具体值,方法是设置 spring.cloud.loadbalancer.hint.[SERVICE_ID] 属性的值,并将 [SERVICE_ID] 替换为您的服务的正确 ID。如果用户未设置提示,则使用 defaultspring-doc.cadn.net.cn

3.9. 基于提示的负载均衡

我们还提供了一个 HintBasedServiceInstanceListSupplier,它是一种基于提示的实例选择的 ServiceInstanceListSupplier 实现。spring-doc.cadn.net.cn

HintBasedServiceInstanceListSupplier 检查提示请求头(默认的头名称是 X-SC-LB-Hint,但您可以通过修改 spring.cloud.loadbalancer.hint-header-name 属性的值来更改它),如果找到提示请求头,则使用该头中传入的提示值来筛选服务实例。spring-doc.cadn.net.cn

如果没有添加提示头,则 HintBasedServiceInstanceListSupplier 会使用 属性中的提示值 来筛选服务实例。spring-doc.cadn.net.cn

如果未设置提示(无论是通过请求头还是属性),将返回委托提供的所有服务实例。spring-doc.cadn.net.cn

在过滤过程中,HintBasedServiceInstanceListSupplier 查找其 metadataMap 中的 hint 键下设置有匹配值的服务实例。如果没有找到匹配的实例,则返回委托方提供的所有实例。spring-doc.cadn.net.cn

您可以使用以下示例配置来设置它:spring-doc.cadn.net.cn

public class CustomLoadBalancerConfiguration {

    @Bean
    public ServiceInstanceListSupplier discoveryClientServiceInstanceListSupplier(
            ConfigurableApplicationContext context) {
        return ServiceInstanceListSupplier.builder()
                    .withDiscoveryClient()
                    .withCaching()
                    .withHints()
                    .build(context);
    }
}

3.10. 将负载均衡的 HTTP 请求进行转换

您可以使用选定的 ServiceInstance 来转换负载均衡的 HTTP 请求。spring-doc.cadn.net.cn

对于 RestTemplate,您需要按照如下方式实现并定义 LoadBalancerRequestTransformerspring-doc.cadn.net.cn

@Bean
public LoadBalancerRequestTransformer transformer() {
    return new LoadBalancerRequestTransformer() {
        @Override
        public HttpRequest transformRequest(HttpRequest request, ServiceInstance instance) {
            return new HttpRequestWrapper(request) {
                @Override
                public HttpHeaders getHeaders() {
                    HttpHeaders headers = new HttpHeaders();
                    headers.putAll(super.getHeaders());
                    headers.add("X-InstanceId", instance.getInstanceId());
                    return headers;
                }
            };
        }
    };
}

对于 WebClient,您需要按照如下方式实现并定义 LoadBalancerClientRequestTransformerspring-doc.cadn.net.cn

@Bean
public LoadBalancerClientRequestTransformer transformer() {
    return new LoadBalancerClientRequestTransformer() {
        @Override
        public ClientRequest transformRequest(ClientRequest request, ServiceInstance instance) {
            return ClientRequest.from(request)
                    .header("X-InstanceId", instance.getInstanceId())
                    .build();
        }
    };
}

如果定义了多个转换器,它们将按照 Bean 的定义顺序依次应用。
或者,您可以使用 LoadBalancerRequestTransformer.DEFAULT_ORDERLoadBalancerClientRequestTransformer.DEFAULT_ORDER 来指定顺序。spring-doc.cadn.net.cn

3.11. Spring Cloud LoadBalancer Starters

我们还提供一个启动程序,它允许您轻松地在Spring Boot应用程序中添加Spring Cloud LoadBalancer。 要使用它,请在构建文件中为Spring Cloud依赖项添加org.springframework.cloud:spring-cloud-starter-loadbalancerspring-doc.cadn.net.cn

Spring Cloud LoadBalancer Starters包含 Spring Boot 缓存清除程序

3.12. 将您自己的 Spring Cloud LoadBalancer 配置传递给您的应用程序

您还可以使用@LoadBalancerClient注释来传递您自己的负载均衡器客户端配置,传递负载均衡器客户端的名称和配置类,如下所示:spring-doc.cadn.net.cn

@Configuration
@LoadBalancerClient(value = "stores", configuration = CustomLoadBalancerConfiguration.class)
public class MyConfiguration {

    @Bean
    @LoadBalanced
    public WebClient.Builder loadBalancedWebClientBuilder() {
        return WebClient.builder();
    }
}
为了使您自己在builder()类上进行LoadBalancer配置的工作变得更加容易,我们向该类添加了一个ServiceInstanceListSupplier方法。
你也可以通过设置spring.cloud.loadbalancer.configurations属性的值为zone-preference来使用预定义配置,或者设置为ZonePreferenceServiceInstanceListSupplier来使用带缓存的health-check配置,或者设置为HealthCheckServiceInstanceListSupplier来使用带缓存的5配置。本页包含所有可用的预定义 bean 配置及其属性。这些预定义配置可以作为定制点使用,或者直接在项目中使用,如果您更喜欢使用而不是自定义您的 own beans。

您可以使用此功能来实例化不同实现的ServiceInstanceListSupplierReactorLoadBalancer,由您自己提供,或者我们作为替代方案(例如ZonePreferenceServiceInstanceListSupplier)来覆盖默认设置。spring-doc.cadn.net.cn

你可以查看一个自定义配置的示例 在这里spring-doc.cadn.net.cn

注释 value 参数(如上例中的 1 ),指定要使用给定自定义配置发送请求的服务 ID。

您还可以通过@LoadBalancerClients注解传递多个配置(用于多个负载均衡器客户端),如以下示例所示:spring-doc.cadn.net.cn

@Configuration
@LoadBalancerClients({@LoadBalancerClient(value = "stores", configuration = StoresLoadBalancerClientConfiguration.class), @LoadBalancerClient(value = "customers", configuration = CustomersLoadBalancerClientConfiguration.class)})
public class MyConfiguration {

    @Bean
    @LoadBalanced
    public WebClient.Builder loadBalancedWebClientBuilder() {
        return WebClient.builder();
    }
}
您作为 @LoadBalancerClient@LoadBalancerClients 配置参数传入的类,要么不应被标注为 @Configuration,要么应位于组件扫描范围之外。
当您创建自己的配置时,如果使用CachingServiceInstanceListSupplierHealthCheckServiceInstanceListSupplier,请确保使用其中一个,而不是同时使用两个,并且必须在层次结构中直接位于通过网络检索实例的提供商之后,例如DiscoveryClientServiceInstanceListSupplier,在此之前应放置任何其他筛选提供程序。

3.13. Spring Cloud LoadBalancer 生命周期

一种可能在使用 Custom LoadBalancer configuration 时有用到注册的 bean 是 LoadBalancerLifecyclespring-doc.cadn.net.cn

这些0个beans提供了回调方法,名为1、2和3,您需要实现这些方法以指定在负载均衡前后应采取什么操作。spring-doc.cadn.net.cn

onStart(Request<RC> request) 接受一个 Request 对象作为参数。它包含用于选择适当实例的数据,包括下游客户端请求和 提示onStartRequest 还接受 Request 对象以及额外的 Response<T> 对象作为参数。另一方面,会向 onComplete(CompletionContext<RES, T, RC> completionContext) 方法提供一个 CompletionContext 对象。它包含负载均衡器 Response,其中包括所选的服务实例、针对该服务实例执行的请求的 Status 以及(如果可用)返回给下游客户端的响应,并且(如果发生了异常)相应的 Throwablespring-doc.cadn.net.cn

The supports(Class requestContextClass, Class responseClass, Class serverTypeClass) method can be used to determine whether the processor in question handles objects of provided types. If not overridden by the user, it returns true.spring-doc.cadn.net.cn

在前面的方法调用中,RC表示RequestContext类型,RES表示客户端响应类型,以及T表示返回的服务器类型。
如果您使用自定义的HTTP状态码,您将收到异常。

spring-doc.cadn.net.cn

为了防止这种情况发生,您可以设置spring.cloud.loadbalancer.use-raw-status-code-in-response-data的值。spring-doc.cadn.net.cn

这将导致使用原始状态码而不是HttpStatus枚举。spring-doc.cadn.net.cn

httpStatus字段在ResponseData中将被使用,但您将能够从rawHttpStatus字段获取原始状态码。spring-doc.cadn.net.cn

3.14. Spring Cloud LoadBalancer 统计信息

我们提供一个名为MicrometerStatsLoadBalancerLifecycleLoadBalancerLifecycle bean,它使用Micrometer为负载平衡调用提供统计信息。spring-doc.cadn.net.cn

为了将此bean添加到应用程序上下文中,请将spring.cloud.loadbalancer.stats.micrometer.enabled的值设置为true,并确保有MeterRegistry可用(例如,通过向项目中添加Spring Boot Actuator)。spring-doc.cadn.net.cn

MicrometerStatsLoadBalancerLifecycle 注册了以下电表在 MeterRegistry 中:
spring-doc.cadn.net.cn

  • loadbalancer.requests.active: 一个仪表,可让您监控任何服务实例(通过标签提供服务实例数据)的当前活动请求数;spring-doc.cadn.net.cn

  • loadbalancer.requests.success: 一个计时器,测量任何已传递响应给底层客户的负载平衡请求的执行时间;spring-doc.cadn.net.cn

  • loadbalancer.requests.failed: 一个计时器,用于测量任何通过负载均衡处理并最终抛出异常的请求的执行时间;spring-doc.cadn.net.cn

  • loadbalancer.requests.discard: 一个计数器,用于测量丢弃的负载平衡请求的数量,即那些由 LoadBalancer 检索出服务实例来执行请求但没有检索出服务实例的情况。spring-doc.cadn.net.cn

额外的关于服务实例、请求数据和响应数据的信息会尽可能添加到指标的标签中。spring-doc.cadn.net.cn

对于某些实现,例如 BlockingLoadBalancerClient,请求和响应数据可能不可用,因为我们从参数中建立泛型类型,可能无法确定类型并读取数据。
摘要报表根据选定的时间间隔计算每个摘要报表类型中包含的度量值。这些摘要报表是在后台生成的,因此报告可能需要几秒钟才能显示。
您还可以通过添加MeterFilters进一步配置这些指标的行为(例如,添加发布百分位数和直方图)。

3.15. 配置单个负载均衡客户端

单个Loadbalancer客户端可以单独配置不同的前缀spring.cloud.loadbalancer.clients.<clientId>.其中clientId是负载均衡器的名称。默认配置值可以在spring.cloud.loadbalancer.命名空间中设置,并将与特定于客户端的值合并,后者优先级更高spring-doc.cadn.net.cn

示例 5. application.yml
spring:
  cloud:
    loadbalancer:
      health-check:
        initial-delay: 1s
      clients:
        myclient:
          health-check:
            interval: 30s

上述示例将结果为一个合并后的健康检查 @ConfigurationProperties 对象,包含 initial-delay=1sinterval=30sspring-doc.cadn.net.cn

The per-client configuration properties work for most of the properties, apart from the following global ones:spring-doc.cadn.net.cn

  • spring.cloud.loadbalancer.enabled - 全局启用或禁用负载平衡spring-doc.cadn.net.cn

  • 0 - 全局启用或禁用负载平衡重试。如果在全局上启用它,您可以使用 1 前缀属性来禁用特定客户端的重试,但反之则不然spring-doc.cadn.net.cn

  • 0-全局启用或禁用LoadBalancer缓存。如果在全局上启用它,您可以通过创建不包含3中的2的1委托层次结构的自定义配置来禁用特定客户端的缓存,但反之则不然。spring-doc.cadn.net.cn

  • spring.cloud.loadbalancer.stats.micrometer.enabled - 全局启用或禁用LoadBalancer Micrometer指标spring-doc.cadn.net.cn

对于那些已经使用了映射的属性,在不使用clients关键字的情况下(例如,使用hintshealth-check.path)可以为每个客户端指定不同的值,我们保留了这种行为以保持库的向后兼容性。该行为将在下个主要版本中进行修改。
3.1.7 开始,我们在 LoadBalancerProperties 中引入了 callGetWithRequestOnDelegates 标志。如果此标志设置为 true,则将实现 ServiceInstanceListSupplier#get(Request request) 方法来调用 delegate.get(request),在那些可分配给 DelegatingServiceInstanceListSupplier 的类中(这些类尚未实现该方法),但不包括 CachingServiceInstanceListSupplierHealthCheckServiceInstanceListSupplier。应该将 CachingServiceInstanceListSupplierHealthCheckServiceInstanceListSupplier 放置在实例供应器层次结构中的网络实例检索供应器之后、任何基于请求的过滤之前。3.1.x 默认情况下该标志被设置为 false,但从 4.1.0 起,默认值将会更改为 true