服务发现、负载平衡和断路器等模式适用于一个通用的抽象层,所有Spring Cloud客户端都可以使用该抽象层,而与实现无关(例如,使用Eureka或Consul进行发现)。Spring中文文档

注释@EnableDiscoveryClient

Spring Cloud Commons 提供注解。 这将查找 和 接口的实现。 发现客户端的实现将配置类添加到键下。 实现示例包括 Spring Cloud Netflix EurekaSpring Cloud Consul DiscoverySpring Cloud Zookeeper Discovery@EnableDiscoveryClientDiscoveryClientReactiveDiscoveryClientMETA-INF/spring.factoriesspring.factoriesorg.springframework.cloud.client.discovery.EnableDiscoveryClientDiscoveryClientSpring中文文档

默认情况下,Spring Cloud 将同时提供阻塞和反应式服务发现客户端。 您可以通过设置 或 轻松禁用阻塞和/或反应式客户端。 要完全禁用服务发现,您只需设置 .spring.cloud.discovery.blocking.enabled=falsespring.cloud.discovery.reactive.enabled=falsespring.cloud.discovery.enabled=falseSpring中文文档

默认情况下,实现将本地 Spring Boot 服务器自动注册到远程发现服务器。 可以通过在 中设置来禁用此行为。DiscoveryClientautoRegister=false@EnableDiscoveryClientSpring中文文档

@EnableDiscoveryClient不再需要。 您可以在类路径上放置一个实现,以使 Spring Boot 应用程序向服务发现服务器注册。DiscoveryClient

健康指标

Commons 自动配置以下 Spring Boot 运行状况指示器。Spring中文文档

DiscoveryClientHealth指标

此运行状况指示器基于当前注册的实现。DiscoveryClientSpring中文文档

  • 要完全禁用,请设置 。spring.cloud.discovery.client.health-indicator.enabled=falseSpring中文文档

  • 要禁用描述字段,请设置 。 否则,它可能会像卷起的 .spring.cloud.discovery.client.health-indicator.include-description=falsedescriptionHealthIndicatorSpring中文文档

  • 要禁用服务检索,请设置 。 默认情况下,指标调用客户端的方法。在具有许多注册服务的部署中,它也可能 在每次检查期间检索所有服务的成本很高。这将跳过服务检索,而是使用客户端的方法。spring.cloud.discovery.client.health-indicator.use-services-query=falsegetServicesprobeSpring中文文档

DiscoveryCompositeHealthContributor

此复合运行状况指标基于所有已注册的 Bean。要禁用, 设置。DiscoveryHealthIndicatorspring.cloud.discovery.client.composite-indicator.enabled=falseSpring中文文档

订购实例DiscoveryClient

DiscoveryClient接口扩展。这在使用多个发现时很有用 客户端,因为它允许您定义返回的发现客户端的顺序,类似于 如何订购 Spring 应用程序加载的 Bean。默认情况下,any 的顺序设置为 。如果要为自定义实现设置不同的顺序,只需覆盖即可 该方法,以便它返回适合您的设置的值。除此之外,您还可以使用 属性来设置 Spring Cloud 提供的实现顺序,以及 。为此,您只需要将 (or for Eureka) 属性设置为所需的值。OrderedDiscoveryClient0DiscoveryClientgetOrder()DiscoveryClientConsulDiscoveryClientEurekaDiscoveryClientZookeeperDiscoveryClientspring.cloud.{clientIdentifier}.discovery.ordereureka.client.orderSpring中文文档

SimpleDiscovery客户端

如果类路径中没有 Service-Registry 支持的实例,则将使用使用属性来获取有关服务和实例的信息的实例。DiscoveryClientSimpleDiscoveryClientSpring中文文档

有关可用实例的信息应按以下格式传递给 via 属性:,其中 是通用前缀,然后是 表示相关服务的 ID,while 表示实例的索引号 (如示例中所示,索引以 开头),然后是 的值 实例可用的实际 URI。spring.cloud.discovery.client.simple.instances.service1[0].uri=http://s11:8080spring.cloud.discovery.client.simple.instancesservice1[0]0uriSpring中文文档

@EnableDiscoveryClient不再需要。 您可以在类路径上放置一个实现,以使 Spring Boot 应用程序向服务发现服务器注册。DiscoveryClient

服务注册表

Commons 现在提供了一个接口,该接口提供了 和 等方法,可让您提供自定义注册服务。 是一个标记接口。ServiceRegistryregister(Registration)deregister(Registration)RegistrationSpring中文文档

以下示例显示了正在使用的:ServiceRegistrySpring中文文档

@Configuration
@EnableDiscoveryClient(autoRegister=false)
public class MyConfiguration {
    private ServiceRegistry registry;

    public MyConfiguration(ServiceRegistry registry) {
        this.registry = registry;
    }

    // called through some external process, such as an event or a custom actuator endpoint
    public void register() {
        Registration registration = constructRegistration();
        this.registry.register(registration);
    }
}

每个实现都有自己的实现。ServiceRegistryRegistrySpring中文文档

如果您使用的是该接口,则需要通过 实现你的正确实现 正在使用。ServiceRegistryRegistryServiceRegistrySpring中文文档

ServiceRegistry 自动注册

默认情况下,实现会自动注册正在运行的服务。 若要禁用该行为,可以设置: * 永久禁用自动注册。 * 通过配置禁用该行为。ServiceRegistry@EnableDiscoveryClient(autoRegister=false)spring.cloud.service-registry.auto-registration.enabled=falseSpring中文文档

ServiceRegistry 自动注册事件

当服务自动注册时,将触发两个事件。第一个事件称为 ,在注册服务之前触发。第二个 事件称为 ,在注册服务后触发。您可以注册一个 (s) 来侦听这些事件并做出反应。InstancePreRegisteredEventInstanceRegisteredEventApplicationListenerSpring中文文档

如果属性设置为 。spring.cloud.service-registry.auto-registration.enabledfalse

Service Registry 执行器端点

Spring Cloud Commons 提供了一个执行器端点。 此端点依赖于 Spring Application Context 中的 bean。 使用 GET 调用将返回 . 将 POST 与 JSON 正文用于同一端点,可将当前状态更改为新值。 JSON 正文必须包含具有首选值的字段。 请参阅更新状态时用于允许值的实现的文档以及为状态返回的值。 例如,Eureka 支持的状态是 、 、 和 。/serviceregistryRegistration/serviceregistryRegistrationRegistrationstatusServiceRegistryUPDOWNOUT_OF_SERVICEUNKNOWNSpring中文文档

如果属性设置为 。spring.cloud.service-registry.auto-registration.enabledfalse

Spring RestTemplate 作为 LoadBalancer 客户端

您可以配置 a 以使用 Load-balancer 客户端。 若要创建负载平衡,请创建一个并使用限定符,如以下示例所示:RestTemplateRestTemplateRestTemplate@Bean@LoadBalancedSpring中文文档

@Configuration
public class MyConfiguration {

    @LoadBalanced
    @Bean
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

public class MyClass {
    @Autowired
    private RestTemplate restTemplate;

    public String doOtherStuff() {
        String result = restTemplate.getForObject("http://stores/stores", String.class);
        return result;
    }
}
不再通过自动配置创建 Bean。 必须由各个应用程序创建它。RestTemplate

URI 需要使用虚拟主机名(即服务名称,而不是主机名)。 用于创建完整的物理地址。BlockingLoadBalancerClientSpring中文文档

要使用负载平衡,您需要在类路径中实现Spring Cloud LoadBalancer。 将 Spring Cloud LoadBalancer starter 添加到您的项目中以使用它。RestTemplate

多个 RestTemplate 对象

如果你想要一个不负载平衡的 bean,请创建一个 bean 并注入它。 要访问负载均衡,请在创建 时使用限定符,如以下示例所示:RestTemplateRestTemplateRestTemplate@LoadBalanced@BeanSpring中文文档

@Configuration
public class MyConfiguration {

    @LoadBalanced
    @Bean
    RestTemplate loadBalanced() {
        return new RestTemplate();
    }

    @Primary
    @Bean
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

public class MyClass {
    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    @LoadBalanced
    private RestTemplate loadBalanced;

    public String doOtherStuff() {
        return loadBalanced.getForObject("http://stores/stores", String.class);
    }

    public String doStuff() {
        return restTemplate.getForObject("http://example.com", String.class);
    }
}
请注意,在前面的示例中,在纯声明上使用了注释来消除非限定注入的歧义。@PrimaryRestTemplate@Autowired
如果看到 等错误,请尝试注入或设置 。java.lang.IllegalArgumentException: Can not set org.springframework.web.client.RestTemplate field com.my.app.Foo.restTemplate to com.sun.proxy.$Proxy89RestOperationsspring.aop.proxyTargetClass=true
不再通过自动配置创建 Bean。 必须由各个应用程序创建它。RestTemplate
要使用负载平衡,您需要在类路径中实现Spring Cloud LoadBalancer。 将 Spring Cloud LoadBalancer starter 添加到您的项目中以使用它。RestTemplate
请注意,在前面的示例中,在纯声明上使用了注释来消除非限定注入的歧义。@PrimaryRestTemplate@Autowired
如果看到 等错误,请尝试注入或设置 。java.lang.IllegalArgumentException: Can not set org.springframework.web.client.RestTemplate field com.my.app.Foo.restTemplate to com.sun.proxy.$Proxy89RestOperationsspring.aop.proxyTargetClass=true

Spring RestClient 作为 LoadBalancer 客户端

您可以配置 a 以使用 Load-balancer 客户端。 若要创建负载平衡,请创建一个并使用限定符,如以下示例所示:RestClientRestClientRestClient.Builder@Bean@LoadBalancedSpring中文文档

@Configuration
public class MyConfiguration {

    @LoadBalanced
    @Bean
    RestClient.Builder restClientBuilder() {
        return RestClient.builder();
    }
}

public class MyClass {

    @Autowired
    private RestClient.Builder restClientBuilder;

    public String doOtherStuff() {
        return restClientBuilder.build().get().uri(URI.create("http://stores/stores")).retrieve().body(String.class);
    }
}

URI 需要使用虚拟主机名(即服务名称,而不是主机名)。 用于创建完整的物理地址。BlockingLoadBalancerClientSpring中文文档

要使用它,请将 Spring Cloud LoadBalancer starter 添加到您的项目中。

多个对象RestClient.Builder

如果你想要一个不负载平衡的 bean,请创建一个 bean 并注入它。 要访问负载均衡,请在创建 时使用限定符,如以下示例所示:RestClient.BuilderRestClient.BuilderRestClient@LoadBalanced@BeanSpring中文文档

@Configuration
public class MyConfiguration {

    @LoadBalanced
    @Bean
    RestClient.Builder loadBalanced() {
        return RestClient.builder();
    }

    @Primary
    @Bean
    RestClient.Builder restClientBuilder() {
        return RestClient.builder();
    }
}

public class MyClass {
    @Autowired
    private RestClient.Builder restClientBuilder;

    @Autowired
    @LoadBalanced
    private RestClient.Builder loadBalanced;

    public String doOtherStuff() {
        return loadBalanced.build().get().uri("http://stores/stores")
        				.retrieve().body(String.class);
    }

    public String doStuff() {
        return restClientBuilder.build().get().uri("http://example.com")
        				.retrieve().body(String.class);
    }
}
请注意,在前面的示例中,在纯声明上使用了注释来消除非限定注入的歧义。@PrimaryRestTemplate@Autowired
要使用它,请将 Spring Cloud LoadBalancer starter 添加到您的项目中。
请注意,在前面的示例中,在纯声明上使用了注释来消除非限定注入的歧义。@PrimaryRestTemplate@Autowired

Spring WebClient 作为 LoadBalancer 客户端

您可以配置为自动使用负载平衡器客户端。 要创建负载平衡,请创建一个并使用限定符,如下所示:WebClientWebClientWebClient.Builder@Bean@LoadBalancedSpring中文文档

@Configuration
public class MyConfiguration {

	@Bean
	@LoadBalanced
	public WebClient.Builder loadBalancedWebClientBuilder() {
		return WebClient.builder();
	}
}

public class MyClass {
    @Autowired
    private WebClient.Builder webClientBuilder;

    public Mono<String> doOtherStuff() {
        return webClientBuilder.build().get().uri("http://stores/stores")
        				.retrieve().bodyToMono(String.class);
    }
}

URI 需要使用虚拟主机名(即服务名称,而不是主机名)。 Spring Cloud LoadBalancer 用于创建完整的物理地址。Spring中文文档

如果要使用 ,则需要具有 Spring Cloud LoadBalancer 类路径中的实现。我们建议您将 Spring Cloud LoadBalancer 启动器添加到您的项目中。 然后,在下面使用。@LoadBalanced WebClient.BuilderReactiveLoadBalancer

多个对象WebClient.Builder

如果你想要一个不负载平衡的 bean,请创建一个 bean 并注入它。 要访问负载均衡,请在创建 时使用限定符,如以下示例所示:WebClient.BuiderWebClientWebClient.Builder@LoadBalanced@BeanSpring中文文档

@Configuration
public class MyConfiguration {

    @LoadBalanced
    @Bean
    WebClient.Builder loadBalanced() {
        return WebClient.builder();
    }

    @Primary
    @Bean
    WebClient.Builder webClientBuilder() {
        return WebClient.builder();
    }
}

public class MyClass {
    @Autowired
    private WebClient.Builder webClientBuilder;

    @Autowired
    @LoadBalanced
    private WebClient.Builder loadBalanced;

    public Mono<String> doOtherStuff() {
        return loadBalanced.build().get().uri("http://stores/stores")
        				.retrieve().bodyToMono(String.class);
    }

    public Mono<String> doStuff() {
        return webClientBuilder.build().get().uri("http://example.com")
        				.retrieve().bodyToMono(String.class);
    }
}

重试失败的请求

可以将负载平衡配置为重试失败的请求。 默认情况下,此逻辑处于禁用状态。 对于非反应式版本(带有),您可以通过将 Spring Retry 添加到应用程序的类路径来启用它。对于响应式版本(带),您需要设置 .RestTemplateRestTemplateWebTestClientspring.cloud.loadbalancer.retry.enabled=trueSpring中文文档

如果要在类路径上使用 Spring Retry 或 Reactive Retry 禁用重试逻辑,可以设置 .spring.cloud.loadbalancer.retry.enabled=falseSpring中文文档

对于非反应式实现,如果要在重试中实现 a,则需要创建一个 bean 类型并覆盖该方法。BackOffPolicyLoadBalancedRetryFactorycreateBackOffPolicy()Spring中文文档

对于响应式实现,您只需通过设置为 来启用它。spring.cloud.loadbalancer.retry.backoff.enabledfalseSpring中文文档

您可以设置:Spring中文文档

  • spring.cloud.loadbalancer.retry.maxRetriesOnSameServiceInstance- 指示应在同一实例上重试请求的次数(针对每个选定的实例单独计算)ServiceInstanceSpring中文文档

  • spring.cloud.loadbalancer.retry.maxRetriesOnNextServiceInstance- 指示应重试新选择的请求的次数ServiceInstanceSpring中文文档

  • spring.cloud.loadbalancer.retry.retryableStatusCodes- 始终重试失败请求的状态代码。Spring中文文档

对于响应式实现,您可以另外设置: - - 设置最短退避时长(默认为5毫秒) - - 设置最大退避时长(默认为最大长时长值,单位为毫秒) - - 设置用于计算每次调用实际回退持续时间的抖动(默认为 0.5)。spring.cloud.loadbalancer.retry.backoff.minBackoffspring.cloud.loadbalancer.retry.backoff.maxBackoffspring.cloud.loadbalancer.retry.backoff.jitterSpring中文文档

对于反应式实现,您还可以实现自己的实现,以便更详细地控制负载均衡的调用重试。LoadBalancerRetryPolicySpring中文文档

对于这两种实现,还可以通过在属性下添加值列表来设置触发回复的例外。如果您这样做,我们确保添加到您提供的例外列表中,以便我们也重试可重试的状态代码。如果未通过属性指定任何异常,则默认使用的例外是 和 。您还可以通过将 设置为 来启用对所有异常的重试。spring.cloud.loadbalancer.[serviceId].retry.retryable-exceptionsRetryableStatusCodeExceptionsIOExceptionTimeoutExceptionRetryableStatusCodeExceptionspring.cloud.loadbalancer.[serviceId].retry.retry-on-all-exceptionstrueSpring中文文档

如果将阻塞实现与 Spring Retries 一起使用,如果要保留以前版本中的行为,请设置为 as 曾经是阻塞实现的默认模式。spring.cloud.loadbalancer.[serviceId].retry.retry-on-all-exceptionstrue
可以使用与上述相同的属性单独配置单个 Loadbalancer 客户端,但前缀是 where 是负载均衡器的名称。spring.cloud.loadbalancer.clients.<clientId>.*clientId
对于负载均衡的重试,默认情况下,我们包装 Bean 以选择与之前选择的实例不同的实例(如果可用)。您可以通过将 的值设置为 来禁用此行为。ServiceInstanceListSupplierRetryAwareServiceInstanceListSupplierspring.cloud.loadbalancer.retry.avoidPreviousInstancefalse
@Configuration
public class MyConfiguration {
    @Bean
    LoadBalancedRetryFactory retryFactory() {
        return new LoadBalancedRetryFactory() {
            @Override
            public BackOffPolicy createBackOffPolicy(String service) {
        		return new ExponentialBackOffPolicy();
        	}
        };
    }
}

如果要将一个或多个实现添加到重试功能中,则需要 创建一个 Bean 类型并返回数组 您希望用于给定的服务,如以下示例所示:RetryListenerLoadBalancedRetryListenerFactoryRetryListenerSpring中文文档

@Configuration
public class MyConfiguration {
    @Bean
    LoadBalancedRetryListenerFactory retryListenerFactory() {
        return new LoadBalancedRetryListenerFactory() {
            @Override
            public RetryListener[] createRetryListeners(String service) {
                return new RetryListener[]{new RetryListener() {
                    @Override
                    public <T, E extends Throwable> boolean open(RetryContext context, RetryCallback<T, E> callback) {
                        //TODO Do you business...
                        return true;
                    }

                    @Override
                     public <T, E extends Throwable> void close(RetryContext context, RetryCallback<T, E> callback, Throwable throwable) {
                        //TODO Do you business...
                    }

                    @Override
                    public <T, E extends Throwable> void onError(RetryContext context, RetryCallback<T, E> callback, Throwable throwable) {
                        //TODO Do you business...
                    }
                }};
            }
        };
    }
}
如果要使用 ,则需要具有 Spring Cloud LoadBalancer 类路径中的实现。我们建议您将 Spring Cloud LoadBalancer 启动器添加到您的项目中。 然后,在下面使用。@LoadBalanced WebClient.BuilderReactiveLoadBalancer
如果将阻塞实现与 Spring Retries 一起使用,如果要保留以前版本中的行为,请设置为 as 曾经是阻塞实现的默认模式。spring.cloud.loadbalancer.[serviceId].retry.retry-on-all-exceptionstrue
可以使用与上述相同的属性单独配置单个 Loadbalancer 客户端,但前缀是 where 是负载均衡器的名称。spring.cloud.loadbalancer.clients.<clientId>.*clientId
对于负载均衡的重试,默认情况下,我们包装 Bean 以选择与之前选择的实例不同的实例(如果可用)。您可以通过将 的值设置为 来禁用此行为。ServiceInstanceListSupplierRetryAwareServiceInstanceListSupplierspring.cloud.loadbalancer.retry.avoidPreviousInstancefalse

Spring WebFlux 作为负载平衡器客户端WebClient

Spring WebFlux 可以同时使用响应式和非响应式配置,如主题所述:WebClientSpring中文文档

Spring WebFlux 与WebClientReactorLoadBalancerExchangeFilterFunction

您可以配置为使用 . 如果将 Spring Cloud LoadBalancer starter 添加到项目中 如果在类路径上,则自动配置。 以下示例演示如何配置 a 以使用反应式负载均衡器:WebClientReactiveLoadBalancerspring-webfluxReactorLoadBalancerExchangeFilterFunctionWebClientSpring中文文档

public class MyClass {
    @Autowired
    private ReactorLoadBalancerExchangeFilterFunction lbFunction;

    public Mono<String> doOtherStuff() {
        return WebClient.builder().baseUrl("http://stores")
            .filter(lbFunction)
            .build()
            .get()
            .uri("/stores")
            .retrieve()
            .bodyToMono(String.class);
    }
}

URI 需要使用虚拟主机名(即服务名称,而不是主机名)。 用于创建完整的物理地址。ReactorLoadBalancerSpring中文文档

具有非反应式负载均衡器客户端的 Spring WebFluxWebClient

如果在类路径上,则自动配置。但是请注意,这 在后台使用非反应式客户端。 以下示例演示如何配置 a 以使用负载均衡器:spring-webfluxLoadBalancerExchangeFilterFunctionWebClientSpring中文文档

public class MyClass {
    @Autowired
    private LoadBalancerExchangeFilterFunction lbFunction;

    public Mono<String> doOtherStuff() {
        return WebClient.builder().baseUrl("http://stores")
            .filter(lbFunction)
            .build()
            .get()
            .uri("/stores")
            .retrieve()
            .bodyToMono(String.class);
    }
}

URI 需要使用虚拟主机名(即服务名称,而不是主机名)。 用于创建完整的物理地址。LoadBalancerClientSpring中文文档

WARN:此方法现已弃用。 我们建议您改用 WebFlux 和响应式负载均衡器Spring中文文档

忽略网络接口

有时,忽略某些命名的网络接口很有用,以便可以将它们从服务发现注册中排除(例如,在 Docker 容器中运行时)。 可以设置正则表达式列表以忽略所需的网络接口。 以下配置忽略接口和所有以 : 开头的接口:docker0vethSpring中文文档

application.yml
spring:
  cloud:
    inetutils:
      ignoredInterfaces:
        - docker0
        - veth.*

还可以通过使用正则表达式列表来强制仅使用指定的网络地址,如以下示例所示:Spring中文文档

bootstrap.yml
spring:
  cloud:
    inetutils:
      preferredNetworks:
        - 192.168
        - 10.0

还可以强制仅使用站点本地地址,如以下示例所示:Spring中文文档

application.yml
spring:
  cloud:
    inetutils:
      useOnlySiteLocalInterfaces: true

请参阅 Inet4Address.html.isSiteLocalAddress() 了解有关站点本地地址的更多详细信息。Spring中文文档

HTTP 客户端工厂

Spring Cloud Commons 提供了用于创建 Apache HTTP 客户端 () 和 OK HTTP 客户端 () 的 bean。 仅当 OK HTTP jar 位于类路径上时,才会创建 Bean。 此外,Spring Cloud Commons 还提供了用于创建两个客户端使用的连接管理器的 bean:用于 Apache HTTP 客户端和 OK HTTP 客户端。 如果要自定义在下游项目中创建 HTTP 客户端的方式,可以提供这些 Bean 的自己的实现。 此外,如果提供 type 为 或 的 bean,则缺省工厂将使用这些构建器作为返回到下游项目的构建器的基础。 您还可以通过设置 或 来禁用这些 Bean 的创建。ApacheHttpClientFactoryOkHttpClientFactoryOkHttpClientFactoryApacheHttpClientConnectionManagerFactoryOkHttpClientConnectionPoolFactoryHttpClientBuilderOkHttpClient.Builderspring.cloud.httpclientfactories.apache.enabledspring.cloud.httpclientfactories.ok.enabledfalseSpring中文文档

启用的功能

Spring Cloud Commons 提供了一个执行器端点。 此终结点返回类路径上可用的功能以及这些功能是否已启用。 返回的信息包括功能类型、名称、版本和供应商。/featuresSpring中文文档

要素类型

有两种类型的“特征”:抽象的和命名的。Spring中文文档

抽象功能是定义接口或抽象类并创建实现的功能,例如 、 或 。 抽象类或接口用于在上下文中查找该类型的 Bean。 显示的版本为 。DiscoveryClientLoadBalancerClientLockServicebean.getClass().getPackage().getImplementationVersion()Spring中文文档

命名功能是没有它们实现的特定类的功能。这些功能包括“断路器”、“API 网关”、“Spring Cloud Bus”等。这些功能需要名称和 Bean 类型。Spring中文文档

声明功能

任何模块都可以声明任意数量的 Bean,如以下示例所示:HasFeatureSpring中文文档

@Bean
public HasFeatures commonsFeatures() {
  return HasFeatures.abstractFeatures(DiscoveryClient.class, LoadBalancerClient.class);
}

@Bean
public HasFeatures consulFeatures() {
  return HasFeatures.namedFeatures(
    new NamedFeature("Spring Cloud Bus", ConsulBusAutoConfiguration.class),
    new NamedFeature("Circuit Breaker", HystrixCommandAspect.class));
}

@Bean
HasFeatures localFeatures() {
  return HasFeatures.builder()
      .abstractFeature(Something.class)
      .namedFeature(new NamedFeature("Some Other Feature", Someother.class))
      .abstractFeature(Somethingelse.class)
      .build();
}

这些豆子中的每一个都应该放在一个适当的保护中。@ConfigurationSpring中文文档

Spring Cloud 兼容性验证

由于某些用户在设置Spring Cloud应用程序时遇到问题,因此我们决定 添加兼容性验证机制。如果您当前的设置不兼容,它将中断 与Spring Cloud要求一起,以及一份报告,显示到底出了什么问题。Spring中文文档

目前,我们验证哪个版本的Spring Boot被添加到您的类路径中。Spring中文文档

报告示例Spring中文文档

***************************
APPLICATION FAILED TO START
***************************

Description:

Your project setup is incompatible with our requirements due to following reasons:

- Spring Boot [2.1.0.RELEASE] is not compatible with this Spring Cloud release train


Action:

Consider applying the following actions:

- Change Spring Boot version to one of the following versions [1.2.x, 1.3.x] .
You can find the latest Spring Boot versions here [https://spring.io/projects/spring-boot#learn].
If you want to learn more about the Spring Cloud Release train compatibility, you can visit this page [https://spring.io/projects/spring-cloud#overview] and check the [Release Trains] section.

要禁用此功能,请设置为 。 如果要覆盖兼容的Spring Boot版本,只需使用逗号分隔的列表设置该属性即可 兼容的 Spring Boot 版本。spring.cloud.compatibility-verifier.enabledfalsespring.cloud.compatibility-verifier.compatible-boot-versionsSpring中文文档