69. 使用 Consul 进行分布式配置

Consul 提供Key/Value Store来存储配置和其他元数据。 Spring Cloud Consul Config 是配置服务器和 Client 端的替代方案。在特殊的“引导”阶段将配置加载到 Spring 环境中。默认情况下,配置存储在/config文件夹中。基于应用程序的名称和模仿 Spring Cloud Config 解析属性 Sequences 的Active配置文件,创建了多个PropertySource实例。例如,名称为“ testApp”且配置文件为“ dev”的应用程序将创建以下属性源:

config/testApp,dev/
config/testApp/
config/application,dev/
config/application/

最具体的属性来源在顶部,最不具体的属性在底部。 config/application文件夹中的属性适用于使用 Consul 进行配置的所有应用程序。 config/testApp文件夹中的属性仅可用于名为“ testApp”的服务的实例。

当前在启动应用程序时读取配置。将 HTTP POST 发送到/refresh将导致重新加载配置。 第 69.3 节“ Config Watch”还将自动检测更改并重新加载应用程序上下文。

69.1 如何激活

要开始使用 Consul Configuration,请使用org.springframework.cloud组和工件 ID spring-cloud-starter-consul-config的启动器。有关使用当前 Spring Cloud Release Train 设置构建系统的详细信息,请参见Spring Cloud Project 页面

这将启用自动配置,该自动配置将设置 Spring Cloud Consul Config。

69.2 Customizing

Consul Config 可以使用以下属性来自定义:

bootstrap.yml.

spring:
  cloud:
    consul:
      config:
        enabled: true
        prefix: configuration
        defaultContext: apps
        profileSeparator: '::'
  • enabled将此值设置为“ false”将禁用 Consul Config

  • prefix设置配置值的基本文件夹

  • defaultContext设置所有应用程序使用的文件夹名称

  • profileSeparator设置分隔符的值,该分隔符用于在带有配置文件的属性源中分隔配置文件名称

69.3 配置监视

Consul Config Watch 利用 consul 到观看键前缀的功能。 Config Watch 进行阻塞 Consul HTTP API 调用,以确定当前应用程序的任何相关配置数据是否已更改。如果有新的配置数据,则会发布刷新事件。这等效于调用/refreshActuator 端点。

要更改称为 Config Watch 的频率,请更改spring.cloud.consul.config.watch.delay。默认值为 1000,以毫秒为单位。延迟是上一次调用结束与下一次调用开始之间的时间量。

要禁用配置监视集spring.cloud.consul.config.watch.enabled=false

手表使用 Spring TaskScheduler来安排对 Consul 的调用。缺省情况下,它是poolSize为 1 的ThreadPoolTaskScheduler。要更改TaskScheduler,请创建一个TaskScheduler类型的 Bean,该 Bean 以ConsulConfigAutoConfiguration.CONFIG_WATCH_TASK_SCHEDULER_NAME常量命名。

69.4 YAML 或具有配置的属性

与单个键/值对相反,以 YAML 或“属性”格式存储属性的对象可能更方便。将spring.cloud.consul.config.format属性设置为YAMLPROPERTIES。例如使用 YAML:

bootstrap.yml.

spring:
  cloud:
    consul:
      config:
        format: YAML

必须在 Consul 的相应data键中设置 YAML。使用上面的默认值,键看起来像:

config/testApp,dev/data
config/testApp/data
config/application,dev/data
config/application/data

您可以将 YAML 文档存储在上面列出的任何键中。

您可以使用spring.cloud.consul.config.data-key更改数据密钥。

69.5 git2consul 与配置

git2consul 是一个 Consul 社区项目,该项目将 git 存储库中的文件加载到 Consul 的各个键中。默认情况下,键的名称是文件的名称。支持 YAML 和属性文件,文件 extensions 分别为.yml.properties。将spring.cloud.consul.config.format属性设置为FILES。例如:

bootstrap.yml.

spring:
  cloud:
    consul:
      config:
        format: FILES

给定/configdevelopment配置文件和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 或属性文件。

69.6 快速失败

如果 Consul 不可用于配置,则在某些情况下(例如本地开发或某些测试场景)不失败可能会很方便。在bootstrap.yml中设置spring.cloud.consul.config.failFast=false将导致配置模块记录警告而不是引发异常。这将允许应用程序 continue 正常启动。