80. Zookeeper 的分布式配置

Zookeeper 提供了一个hierarchical namespace,使 Client 端可以存储任意数据,例如配置数据。 Spring Cloud Zookeeper Config 是配置服务器和 Client 端的替代方案。在特殊的“引导”阶段将配置加载到 Spring 环境中。默认情况下,配置存储在/config名称空间中。根据应用程序名称和Active配置文件创建多个PropertySource实例,以模仿 Spring Cloud Config 解析属性的 Sequences。例如,名称为testApp且配置文件为dev的应用程序为其创建了以下属性源:

  • config/testApp,dev

  • config/testApp

  • config/application,dev

  • config/application

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

当前在启动应用程序时读取配置。向/refresh发送 HTTP POST请求将导致重新加载配置。当前未实现监视配置名称空间(Zookeeper 支持)。

80.1 Activating

包括对org.springframework.cloud:spring-cloud-starter-zookeeper-config的依赖项将启用自动配置,该自动配置可设置 Spring Cloud Zookeeper Config。

Warning

使用 Zookeeper 3.4 版时,您需要按照here所述更改包含依赖项的方式。

80.2 Customizing

Zookeeper Config 可以通过设置以下属性来自定义:

bootstrap.yml.

spring:
  cloud:
    zookeeper:
      config:
        enabled: true
        root: configuration
        defaultContext: apps
        profileSeparator: '::'
  • enabled:将此值设置为false将禁用 Zookeeper Config。

  • root:设置配置值的基本名称空间。

  • defaultContext:设置所有应用程序使用的名称。

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

80.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 类,以了解CuratorFramework bean 的默认配置。

另外,您可以从依赖于现有CuratorFramework bean 的类中添加凭据,如以下示例所示:

@BoostrapConfiguration
public class DefaultCuratorFrameworkConfig {

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

}

此 bean 的创建必须在 boostrapping 阶段进行。您可以注册配置类以在此阶段运行,方法是使用@BootstrapConfigurationComments 它们,并将它们包含在以逗号分隔的列表中,该列表设置为resources/META-INF/spring.factories文件中org.springframework.cloud.bootstrap.BootstrapConfiguration属性的值,如以下示例所示:

resources/META-INF/spring.factories.

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