4.0.3
该项目通过自动配置和绑定到 Spring 环境和其他 Spring 编程模型习惯用法,为 Spring Boot 应用程序提供 Consul 集成。通过一些简单的注释,您可以快速启用和配置应用程序内的常见模式,并使用基于 Consul 的组件构建大型分布式系统。提供的模式包括服务发现、控制总线和配置。智能路由和客户端负载均衡、断路器是通过与其他 Spring Cloud 项目集成来提供的。
1. 快速入门
本快速入门逐步介绍如何使用 Spring Cloud Consul 进行服务发现和分布式配置。
首先,在您的计算机上运行 Consul Agent。然后您可以访问它并将其用作 Spring Cloud Consul 的服务注册表和配置源。
1.1. 发现客户端使用情况
要在应用程序中使用这些功能,您可以将其构建为依赖于spring-cloud-consul-core. 添加依赖项最方便的方法是使用 Spring Boot 启动器:org.springframework.cloud:spring-cloud-starter-consul-discovery。我们建议使用依赖管理和spring-boot-starter-parent. 以下示例显示了典型的 Maven 配置:
<project>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>{spring-boot-version}</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
以下示例显示了典型的 Gradle 设置:
plugins {
id 'org.springframework.boot' version ${spring-boot-version}
id 'io.spring.dependency-management' version ${spring-dependency-management-version}
id 'java'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-consul-discovery'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
现在您可以创建一个标准的 Spring Boot 应用程序,例如以下 HTTP 服务器:
@SpringBootApplication
@RestController
public class Application {
@GetMapping("/")
public String home() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
当此 HTTP 服务器运行时,它会连接到在默认本地 8500 端口运行的 Consul Agent。要修改启动行为,您可以使用 更改 Consul Agent 的位置application.properties,如下例所示:
spring:
cloud:
consul:
host: localhost
port: 8500
您现在可以使用DiscoveryClient、@LoadBalanced RestTemplate、 或@LoadBalanced WebClient.Builder从 Consul 检索服务和实例数据,如以下示例所示:
@Autowired
private DiscoveryClient discoveryClient;
public String serviceUrl() {
List<ServiceInstance> list = discoveryClient.getInstances("STORES");
if (list != null && list.size() > 0 ) {
return list.get(0).getUri().toString();
}
return null;
}
1.2. 分布式配置使用
spring-cloud-consul-core要在应用程序中使用这些功能,您可以将其构建为依赖于和 的Spring Boot 应用程序spring-cloud-consul-config。添加依赖项最方便的方法是使用 Spring Boot 启动器:org.springframework.cloud:spring-cloud-starter-consul-config。我们建议使用依赖管理和spring-boot-starter-parent. 以下示例显示了典型的 Maven 配置:
<project>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>{spring-boot-version}</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
以下示例显示了典型的 Gradle 设置:
plugins {
id 'org.springframework.boot' version ${spring-boot-version}
id 'io.spring.dependency-management' version ${spring-dependency-management-version}
id 'java'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-consul-config'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
现在您可以创建一个标准的 Spring Boot 应用程序,例如以下 HTTP 服务器:
@SpringBootApplication
@RestController
public class Application {
@GetMapping("/")
public String home() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
应用程序从 Consul 检索配置数据。
如果您使用Spring Cloud Consul Config,则需要设置该spring.config.import属性才能绑定到Consul。您可以在Spring Boot 配置数据导入部分阅读更多相关信息。
|
3. 领事代理
Consul Agent 客户端必须可用于所有 Spring Cloud Consul 应用程序。默认情况下,代理客户端预计位于localhost:8500。有关如何启动代理客户端以及如何连接到 Consul 代理服务器集群的详细信息,请参阅代理文档。对于开发,安装 consul 后,可以使用以下命令启动 Consul Agent:
./src/main/bash/local_run_consul.sh
这将在端口 8500 上以服务器模式启动代理,用户界面位于localhost:8500
4. 使用 Consul 进行服务发现
服务发现是基于微服务的架构的关键原则之一。尝试手动配置每个客户端或某种形式的约定可能非常困难,而且可能非常脆弱。Consul 通过HTTP API和DNS提供服务发现服务。Spring Cloud Consul 利用 HTTP API 进行服务注册和发现。这不会阻止非 Spring Cloud 应用程序利用 DNS 接口。Consul Agents 服务器在集群中运行,通过gossip 协议进行通信并使用Raft 共识协议。
4.1. 如何激活
org.springframework.cloud要激活 Consul 服务发现,请使用带有组和工件 id 的启动器spring-cloud-starter-consul-discovery。有关使用当前 Spring Cloud 发布系列设置构建系统的详细信息,请参阅Spring Cloud 项目页面。
4.2. 向领事注册
当客户端向 Consul 注册时,它会提供有关自身的元数据,例如主机和端口、id、名称和标签。默认情况下,Consul 每 10 秒就会创建一次HTTP 检查/actuator/health来检查端点。如果健康检查失败,服务实例将被标记为关键。
领事客户端示例:
@SpringBootApplication
@RestController
public class Application {
@RequestMapping("/")
public String home() {
return "Hello world";
}
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}
(即完全正常的 Spring Boot 应用程序)。如果 Consul 客户端位于除 之外的其他位置localhost:8500,则需要进行配置来定位客户端。例子:
spring:
cloud:
consul:
host: localhost
port: 8500
如果您使用Spring Cloud Consul Config,并且您设置了spring.cloud.bootstrap.enabled=true或spring.config.use-legacy-processing=true或 使用spring-cloud-starter-bootstrap,则需要将上述值放入bootstrap.yml而不是application.yml。
|
默认服务名称、实例 ID 和端口分别取自Environment、${spring.application.name}、 Spring 上下文 ID 和${server.port}。
要禁用 Consul Discovery Client,您可以设置spring.cloud.consul.discovery.enabled为false。spring.cloud.discovery.enabled当设置为时,Consul Discovery Client 也将被禁用false。
要禁用服务注册,您可以设置spring.cloud.consul.discovery.register为false。
4.2.1. 将管理注册为单独的服务
当管理服务器端口设置为与应用程序端口不同的端口时,通过设置management.server.port属性,管理服务将注册为与应用程序服务不同的单独服务。例如:
spring:
application:
name: myApp
management:
server:
port: 4452
以上配置将注册以下2个服务:
-
申请服务:
ID: myApp Name: myApp
-
管理服务:
ID: myApp-management Name: myApp-management
管理服务将从应用程序服务instanceId继承它。serviceName例如:
spring:
application:
name: myApp
management:
server:
port: 4452
spring:
cloud:
consul:
discovery:
instance-id: custom-service-id
serviceName: myprefix-${spring.application.name}
以上配置将注册以下2个服务:
-
申请服务:
ID: custom-service-id Name: myprefix-myApp
-
管理服务:
ID: custom-service-id-management Name: myprefix-myApp-management
通过以下属性可以进一步定制:
/** Port to register the management service under (defaults to management port) */ spring.cloud.consul.discovery.management-port /** Suffix to use when registering management service (defaults to "management") */ spring.cloud.consul.discovery.management-suffix /** Tags to use when registering management service (defaults to "management") */ spring.cloud.consul.discovery.management-tags
4.2.2. HTTP 健康检查
Consul 实例的健康检查默认位于“/actuator/health”,这是 Spring Boot Actuator 应用程序中健康端点的默认位置。即使对于 Actuator 应用程序,如果您使用非默认上下文路径或 servlet 路径(例如server.servletPath=/foo)或管理端点路径(例如management.server.servlet.context-path=/admin),您也需要更改此设置。
Consul 用于检查健康端点的时间间隔也可以配置。“10s”和“1m”分别代表10秒和1分钟。
此示例说明了上述内容(有关更多选项,请参阅附录页面spring.cloud.consul.discovery.health-check-*中的属性)。
spring:
cloud:
consul:
discovery:
healthCheckPath: ${management.server.servlet.context-path}/actuator/health
healthCheckInterval: 15s
您可以通过设置完全禁用 HTTP 健康检查spring.cloud.consul.discovery.register-health-check=false。
应用标头
标头可应用于健康检查请求。例如,如果您尝试注册使用Vault Backend的Spring Cloud Config服务器:
spring:
cloud:
consul:
discovery:
health-check-headers:
X-Config-Token: 6442e58b-d1ea-182e-cfa5-cf9cddef0722
根据 HTTP 标准,每个标头可以有多个值,在这种情况下,可以提供一个数组:
spring:
cloud:
consul:
discovery:
health-check-headers:
X-Config-Token:
- "6442e58b-d1ea-182e-cfa5-cf9cddef0722"
- "Some other value"
4.2.3. TTL健康检查
可以使用Consul TTL 检查代替默认配置的 HTTP 检查。主要区别在于应用程序向 Consul 代理发送心跳信号,而不是 Consul 代理向应用程序发送请求。
还可以配置应用程序发送 ping 的时间间隔。“10s”和“1m”分别代表10秒和1分钟。默认值为 30 秒。
此示例说明了上述内容(有关更多选项,请参阅附录页面spring.cloud.consul.discovery.heartbeat.*中的属性)。
spring:
cloud:
consul:
discovery:
heartbeat:
enabled: true
ttl: 10s
TTL申请状态
对于 Spring Boot Actuator 应用程序,状态是根据其可用的运行状况端点确定的。当运行状况端点不可用(禁用或不是 Spring Boot Actuator 应用程序)时,它假定应用程序运行状况良好。
查询健康端点时,默认使用根健康组。可以通过设置以下属性来使用不同的健康组:
spring:
cloud:
consul:
discovery:
heartbeat:
actuator-health-group: <your-custom-group-goes-here>
您可以通过设置以下属性来完全禁用运行状况端点:
spring:
cloud:
consul:
discovery:
heartbeat:
use-actuator-health: false
自定义 TTL 应用状态
如果你想配置自己的应用程序状态机制,只需实现该ApplicationStatusProvider接口即可
@Bean
public class MyCustomApplicationStatusProvider implements ApplicationStatusProvider {
public CheckStatus currentStatus() {
return yourMethodToDetermineAppStatusGoesHere();
}
}
并使其可用于应用程序上下文:
@Bean
public CustomApplicationStatusProvider customAppStatusProvider() {
return new MyCustomApplicationStatusProvider();
}
4.2.4. 执行器健康指示器
如果服务实例是 Spring Boot Actuator 应用程序,则可能会提供以下 Actuator 健康指标。
发现客户健康指标
当 Consul 服务发现处于活动状态时,会配置DiscoverClientHealthIndicator并将其提供给 Actuator 运行状况端点。请参阅此处了解配置选项。
4.2.5. 元数据
Consul 支持服务的元数据。Spring CloudServiceInstance有一个Map<String, String> metadata由服务字段填充的字段meta。要填充字段,请在或属性meta上设置值。spring.cloud.consul.discovery.metadataspring.cloud.consul.discovery.management-metadata
spring:
cloud:
consul:
discovery:
metadata:
myfield: myvalue
anotherfield: anothervalue
上述配置将生成一个元字段包含myfield→myvalue和的服务anotherfield→anothervalue。
生成的元数据
Consul 自动注册将自动生成一些条目。
| 钥匙 | 价值 |
|---|---|
'团体' |
财产 |
'安全的' |
如果属性 |
属性 |
财产 |
旧版本的 Spring Cloud ConsulServiceInstance.getMetadata()通过解析属性来填充 Spring Cloud Commons 中的方法spring.cloud.consul.discovery.tags。不再支持此功能,请迁移到使用spring.cloud.consul.discovery.metadata地图。
|
4.2.6. 使 Consul 实例 ID 唯一
默认情况下,consul 实例注册的 ID 等于其 Spring 应用程序上下文 ID。默认情况下,Spring 应用程序上下文 ID 是${spring.application.name}:comma,separated,profiles:${server.port}。在大多数情况下,这将允许一项服务的多个实例在一台计算机上运行。如果需要进一步的唯一性,使用 Spring Cloud,您可以通过在spring.cloud.consul.discovery.instanceId. 例如:
spring:
cloud:
consul:
discovery:
instanceId: ${spring.application.name}:${vcap.application.instance_id:${spring.application.instance_id:${random.value}}}
通过此元数据以及在本地主机上部署的多个服务实例,随机值将在那里启动以使实例唯一。在 Cloudfoundry 中,vcap.application.instance_id将在 Spring Boot 应用程序中自动填充,因此不需要随机值。
4.3. 查找服务
4.3.1. 使用负载均衡器
Spring Cloud 支持Feign(REST 客户端构建器),并且SpringRestTemplate
支持使用逻辑服务名称/id 而不是物理 URL 来查找服务。Feign 和发现感知的 RestTemplate 都利用Spring Cloud LoadBalancer进行客户端负载平衡。
如果您想使用 RestTemplate 访问服务 STORES,只需声明:
@LoadBalanced
@Bean
public RestTemplate loadbalancedRestTemplate() {
return new RestTemplate();
}
并像这样使用它(注意我们如何使用 Consul 的 STORES 服务名称/id 而不是完全限定的域名):
@Autowired
RestTemplate restTemplate;
public String getFirstProduct() {
return this.restTemplate.getForObject("https://STORES/products/1", String.class);
}
如果您在多个数据中心拥有 Consul 集群,并且想要访问另一个数据中心中的服务,仅服务名称/ID 是不够的。在这种情况下,您使用属性spring.cloud.consul.discovery.datacenters.STORES=dc-west,其中STORES是服务名称/id,dc-west是 STORES 服务所在的数据中心。
| Spring Cloud 现在还提供对 Spring Cloud LoadBalancer的支持。 |
4.3.2. 使用 DiscoveryClient
您还可以使用它org.springframework.cloud.client.discovery.DiscoveryClient为非 Netflix 特定的发现客户端提供简单的 API,例如
@Autowired
private DiscoveryClient discoveryClient;
public String serviceUrl() {
List<ServiceInstance> list = discoveryClient.getInstances("STORES");
if (list != null && list.size() > 0 ) {
return list.get(0).getUri();
}
return null;
}
4.4. 领事目录手表
Consul Catalog Watch 利用 consul 监视服务的能力。Catalog Watch 进行阻塞 Consul HTTP API 调用以确定是否有任何服务发生更改。如果有新的服务数据,则会发布心跳事件。
更改 Config Watch 调用的频率 更改spring.cloud.consul.config.discovery.catalog-services-watch-delay。默认值为 1000,单位为毫秒。延迟是上一次调用结束和下一次调用开始之间的时间量。
禁用目录监视设置spring.cloud.consul.discovery.catalogServicesWatch.enabled=false。
该手表使用 SpringTaskScheduler来安排对 consul 的呼叫。默认情况下,它是 a,ThreadPoolTaskSchedulerapoolSize为 1。要更改,请创建一个以常量命名的TaskScheduler类型的 bean 。TaskSchedulerConsulDiscoveryClientConfiguration.CATALOG_WATCH_TASK_SCHEDULER_NAME
5. Consul的分布式配置
Consul 提供了一个键/值存储来存储配置和其他元数据。Spring Cloud Consul Config 是Config Server 和 Client的替代方案。配置在特殊的“引导”阶段加载到 Spring 环境中。默认情况下配置存储在该/config文件夹中。多个PropertySource实例是根据应用程序的名称和模仿 Spring Cloud Config 解析属性顺序的活动配置文件创建的。例如,名称为“testApp”且配置文件为“dev”的应用程序将创建以下属性源:
config/testApp,dev/ config/testApp/ config/application,dev/ config/application/
最具体的属性来源位于顶部,最不具体的属性来源位于底部。该config/application文件夹中的属性适用于所有使用consul进行配置的应用程序。该config/testApp文件夹中的属性仅适用于名为“testApp”的服务实例。
目前,配置是在应用程序启动时读取的。发送 HTTP POST 将/refresh导致重新加载配置。Config Watch还将自动检测更改并重新加载应用程序上下文。
5.1. 如何激活
org.springframework.cloud要开始使用 Consul 配置,请使用带有组和工件 id 的启动器spring-cloud-starter-consul-config。有关使用当前 Spring Cloud 发布系列设置构建系统的详细信息,请参阅Spring Cloud 项目页面。
5.2. Spring Boot 配置数据导入
Spring Boot 2.4 引入了一种通过属性导入配置数据的新方法spring.config.import。现在这是从 Consul 获取配置的默认方式。
要选择连接到 Consul,请在 application.properties 中设置以下内容:
spring.config.import=optional:consul:
这将连接到默认位置“http://localhost:8500”的 Consul Agent。optional:如果无法连接到 Consul,删除前缀将导致 Consul Config 失败。要更改 Consul Config 的连接属性,请设置spring.cloud.consul.host或spring.cloud.consul.port将主机/端口对添加到spring.config.import语句中,例如spring.config.import=optional:consul:myhost:8500. 导入属性中的位置优先于主机和端口属性。
Consul Config 将尝试根据spring.cloud.consul.config.name(默认为spring.application.name属性的值)和spring.cloud.consul.config.default-context(默认为application)从四个自动上下文加载值。如果您想指定上下文而不是使用计算的上下文,则可以将该信息添加到语句中spring.config.import。
spring.config.import=optional:consul:myhost:8500/contextone;/context/two
这将选择性地仅从/contextone和加载配置/context/two。
通过 导入的 Spring Boot 配置数据方法不需要文件
(bootstrap属性或 yaml)。
spring.config.import |
5.3. 定制
Consul Config 可以使用以下属性进行定制:
spring:
cloud:
consul:
config:
enabled: true
prefix: configuration
defaultContext: apps
profileSeparator: '::'
如果您设置了spring.cloud.bootstrap.enabled=true或spring.config.use-legacy-processing=true或 包含spring-cloud-starter-bootstrap,则需要将上述值放入bootstrap.yml而不是 中application.yml。
|
-
enabled将此值设置为“false”会禁用 Consul Config -
prefix设置配置值的基本文件夹 -
defaultContext设置所有应用程序使用的文件夹名称 -
profileSeparator设置用于分隔属性源中的配置文件名称和配置文件的分隔符的值
5.4. 配置观察
Consul Config Watch 利用 consul 监视键前缀的能力。Config Watch 会进行阻塞 Consul HTTP API 调用,以确定当前应用程序的相关配置数据是否已更改。如果有新的配置数据,则会发布刷新事件。这相当于调用/refresh执行器端点。
更改 Config Watch 调用的频率 更改spring.cloud.consul.config.watch.delay。默认值为 1000,单位为毫秒。延迟是上一次调用结束和下一次调用开始之间的时间量。
禁用配置监视设置spring.cloud.consul.config.watch.enabled=false。
该手表使用 SpringTaskScheduler来安排对 consul 的呼叫。默认情况下,它是 a,ThreadPoolTaskSchedulerapoolSize为 1。要更改,请创建一个以常量命名的TaskScheduler类型的 bean 。TaskSchedulerConsulConfigAutoConfiguration.CONFIG_WATCH_TASK_SCHEDULER_NAME
5.5. YAML 或带有配置的属性
与单独的键/值对相比,以 YAML 或 Properties 格式存储属性 blob 可能更方便。将spring.cloud.consul.config.format属性设置为YAML或PROPERTIES。例如使用 YAML:
spring:
cloud:
consul:
config:
format: YAML
如果您设置了spring.cloud.bootstrap.enabled=true或spring.config.use-legacy-processing=true或 包含spring-cloud-starter-bootstrap,则需要将上述值放入bootstrap.yml而不是 中application.yml。
|
YAML 必须在 consul 中的适当键中设置data。使用上面的默认值,按键将如下所示:
config/testApp,dev/data config/testApp/data config/application,dev/data config/application/data
您可以将 YAML 文档存储在上面列出的任何键中。
您可以使用 更改数据密钥spring.cloud.consul.config.data-key。
5.6. git2consul 与配置
git2consul 是一个 Consul 社区项目,它将文件从 git 存储库加载到 Consul 中的各个密钥。默认情况下,键的名称是文件的名称。YAML 和属性文件分别支持文件扩展名.yml和.properties。将spring.cloud.consul.config.format属性设置为FILES. 例如:
spring:
cloud:
consul:
config:
format: FILES
给定 中的以下键/config、development配置文件和应用程序名称foo:
.gitignore application.yml bar.properties foo-development.properties foo-production.yml foo.properties master.ref
将创建以下财产来源:
config/foo-development.properties config/foo.properties config/application.yml
每个键的值需要是格式正确的 YAML 或属性文件。
5.7. 快速失败
在某些情况下(例如本地开发或某些测试场景),如果 consul 不可用于配置,则可能很方便不会失败。设置spring.cloud.consul.config.fail-fast=false将导致配置模块记录警告而不是抛出异常。这将允许应用程序继续正常启动。
如果您设置了spring.cloud.bootstrap.enabled=true或spring.config.use-legacy-processing=true或 包含spring-cloud-starter-bootstrap,则需要将上述值放入bootstrap.yml而不是 中application.yml。
|
6. 领事重试
如果您预计应用程序启动时领事代理可能偶尔不可用,您可以要求它在失败后继续尝试。您需要将
spring-retry和添加spring-boot-starter-aop到您的类路径中。默认行为是重试 6 次,初始退避间隔为 1000 毫秒,后续退避的指数乘数为 1.1。您可以使用配置属性来配置这些属性(以及其他属性)spring.cloud.consul.retry.*。这适用于 Spring Cloud Consul Config 和 Discovery 注册。
要完全控制重试,请添加id 为“consulRetryInterceptor”@Bean的类型
RetryOperationsInterceptor。Spring Retry 有一个RetryInterceptorBuilder可以轻松创建的方法。
|
7.带有Consul的Spring Cloud总线
7.1. 如何激活
要开始使用 Consul Bus,请使用带有组org.springframework.cloud和工件 id 的启动器spring-cloud-starter-consul-bus。有关使用当前 Spring Cloud 发布系列设置构建系统的详细信息,请参阅Spring Cloud 项目页面。
请参阅Spring Cloud Bus文档,了解可用的执行器端点以及如何发送自定义消息。
8.Hystrix 断路器
应用程序可以通过在项目 pom.xml 中包含此启动器来使用 Spring Cloud Netflix 项目提供的 Hystrix Circuit Breaker:spring-cloud-starter-hystrix。Hystrix 不依赖于 Netflix Discovery 客户端。该@EnableHystrix注释应该放在配置类(通常是主类)上。然后可以对方法进行注释@HystrixCommand以受到断路器的保护。请参阅文档了解更多详细信息。
9. Hystrix 与 Turbine 和 Consul 的指标聚合
Turbine(由 Spring Cloud Netflix 项目提供)聚合多个实例 Hystrix 指标流,因此仪表板可以显示聚合视图。Turbine 使用该DiscoveryClient接口来查找相关实例。要将 Turbine 与 Spring Cloud Consul 一起使用,请按照类似于以下示例的方式配置 Turbine 应用程序:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-turbine</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
请注意,Turbine 依赖项不是启动器。涡轮启动器包括对 Netflix Eureka 的支持。
spring.application.name: turbine
applications: consulhystrixclient
turbine:
aggregator:
clusterConfig: ${applications}
appConfig: ${applications}
和部分必须匹配,因此将逗号分隔的服务 ID 列表放入单独的配置属性中非常有用clusterConfig。appConfig
@EnableTurbine
@SpringBootApplication
public class Turbine {
public static void main(String[] args) {
SpringApplication.run(DemoturbinecommonsApplication.class, args);
}
}