74. 使用 Zookeeper 分发 Configuration

Zookeeper 提供分层命名空间,允许 clients 存储任意数据,例如 configuration 数据。 Spring Cloud Zookeeper Config 是配置服务器和 Client的替代品。 Configuration 在特殊的“bootstrap”阶段加载到 Spring 环境中。 Configuration 默认存储在/config命名空间中。基于 application 的 name 和 active profiles 创建了多个PropertySource实例,这些实例模仿解析 properties 的 Spring Cloud Config order。对于 example,name“testApp”和“dev”profile 的 application 将创建以下 property 源:

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

最具体的 property 源位于顶部,底部最不具体。 Properties 是config/application名称空间适用于使用 zookeeper 进行 configuration 的所有 applications。 config/testApp名称空间中的 Properties 仅可用于名为“testApp”的服务的实例。

Configuration 目前在启动 application 时读取。将 HTTP POST 发送到/refresh将导致重新加载 configuration。观察 configuration 命名空间(Zookeeper 支持)目前尚未实现,但将成为此项目的未来添加项。

74.1 如何激活

包含对org.springframework.cloud:spring-cloud-starter-zookeeper-config的依赖将启用 auto-configuration,这将设置 Spring Cloud Zookeeper 配置。

74.2 自定义

可以使用以下 properties 自定义 Zookeeper 配置:

bootstrap.yml.

spring:
  cloud:
    zookeeper:
      config:
        enabled: true
        root: configuration
        defaultContext: apps
        profileSeparator: '::'
  • enabled将此 value 设置为“false”会禁用 Zookeeper 配置

  • root 设置 configuration 值的基本命名空间

  • defaultContext sets 设置所有 applications 使用的 name

  • profileSeparator sets 用于将 property 源中的 profile name 与 profiles 分隔开的分隔符的 value

74.3 ACL

您可以通过调用 CuratorFramework bean 的 addAuthInfo 方法为 Zookeeper ACL 添加身份验证信息。实现此目的的一种方法是提供您自己的 CuratorFramework bean:

@BoostrapConfiguration
public class CustomCuratorFrameworkConfig {

  @Bean
  public CuratorFramework curatorFramework() {
    CuratorFramework curator = new CuratorFramework();
    curator.addAuthInfo("digest", "user:password".getBytes());
    return curator;
  }

}

请参阅ZookeeperAutoConfiguration class以查看默认情况下如何配置 CuratorFramework bean。

或者,您可以从依赖于现有 CuratorFramework bean 的 class 添加凭据:

@BoostrapConfiguration
public class DefaultCuratorFrameworkConfig {

  public ZookeeperConfig(CuratorFramework curator) {
    curator.addAuthInfo("digest", "user:password".getBytes());
  }

}

这必须在加速阶段发生。您可以在此阶段将 configuration classes 注册到 run,方法是使用@BootstrapConfiguration注释它们,并将它们包含在 comma-separated 列表集中,作为resources/META-INF/spring.factories文件中 property org.springframework.cloud.bootstrap.BootstrapConfiguration的 value:

resources/META-INF/spring.factories.

org.springframework.cloud.bootstrap.BootstrapConfiguration=\
my.project.CustomCuratorFrameworkConfig,\
my.project.DefaultCuratorFrameworkConfig

spring-cloud.adoc 中未解决的指令 - include::../../../../cli/docs/src/main/asciidoc/spring-cloud-cli.adoc [51]