69. 使用 Consul 的分布式配置

Consul 提供用于存储配置和其他元数据的 Key/Value 存储。Spring Cloud Consul 配置是配置服务器和客户端的替代方案。在特殊的 "bootstrap" 阶段,配置被加载到 Spring 环境中。默认情况下,配置存储在 /config 文件夹中。根据应用程序的名称和模拟 Spring Cloud 配置解析属性顺序的活动配置文件创建多个 PropertySource 实例。例如,名为 "testApp" 且具有 "dev" 配置组的应用程序将创建以下属性源:

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

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

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

69.1 如何激活

要开始使用 consul 配置,请使用带有 group org.springframework.cloud 和 artifact id spring-cloud-starter-consul-config 的 starter。请参见 Spring Cloud 项目页面,了解有关使用当前 Spring Cloud 发布列车设置构建系统的详细信息。

这将启用将设置 Spring Cloud Consul 配置的自动配置。

69.2 自定义

Consul 配置可以使用以下属性进行自定义:

bootstrap.yml. 

spring:
  cloud:
    consul:
      config:
        enabled: true
        prefix: configuration
        defaultContext: apps
        profileSeparator: '::'

  • enabled 将此值设置为 "false" 将禁用 Consul 配置 Config
  • prefix 设置配置值的基本文件夹
  • defaultContext 设置所有应用程序使用的文件夹名称
  • profileSeparator 设置分隔符的值,该分隔符用于用配置文件分隔属性源中的配置文件名称

69.3 配置观察

Consul 配置观察利用 consul 监视键前缀的能力。配置观察进行一个阻塞的 Consul HTTP API 调用,以确定当前应用程序的任何相关配置数据是否已更改。如果有新的配置数据,将发布刷新事件。这相当于调用 /refresh 执行器端点。

更改配置表被称为更改 spring.cloud.consul.config.watch.delay 时的频率。默认值为 1000,单位为毫秒。延迟是上一次调用结束后和下一次调用开始后的时间量。

要禁用配置观察,请设置 spring.cloud.consul.config.watch.enabled=false。

观察使用 Spring TaskScheduler 来安排对 Consul 的调用。默认情况下,它是池大小为 1 的 ThreadPoolTaskScheduler。要更改 TaskScheduler,,请创建一个类型为 TaskScheduler, 的 bean,该 bean 的名称为 ConsulConfigAutoConfiguration.CONFIG_WATCH_TASK_SCHEDULER_NAME 常量。

69.4 YAML 或 Properties 进行配置

与单独的 键/值 对相比,以 YAML 或 Properties 格式存储一个属性块可能更方便。将 spring.cloud.consul.config.format 属性设置为 YAML 或 PROPERTIES。例如,要使用 YAML:

bootstrap.yml. 

spring:
  cloud:
    consul:
      config:
        format: YAML

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

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 和 Properties 文件,文件扩展名分别为 .yml 和 .properties。将 spring.cloud.consul.config.format 属性设置为 FILES。例如:

bootstrap.yml. 

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 或 Properties 文件。

69.6 快速失效

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