首页 > 其他分享 >如何使用 Spring Cloud Zookeeper 进行服务发现和分布式配置

如何使用 Spring Cloud Zookeeper 进行服务发现和分布式配置

时间:2022-12-05 10:35:01浏览次数:43  
标签:zookeeper Spring Zookeeper Cloud spring org cloud

如何使用 Spring Cloud Zookeeper 进行服务发现和分布式配置_spring

该项目通过以下方式为 Spring Boot 应用程序提供 Zookeeper 集成 自动配置并绑定到 Spring 环境和其他 Spring 编程模型 习语。通过一些注释,您可以快速启用和配置常见模式 在您的应用程序中,并使用基于 Zookeeper 构建大型分布式系统 组件。提供的模式包括服务发现和配置。该项目 还通过与Spring Cloud LoadBalancer集成提供客户端负载平衡。

1. 快速入门

本快速入门介绍如何使用 Spring Cloud Zookeeper 进行服务发现和分布式配置。

首先,在您的机器上运行 Zookeeper。然后,您可以访问它并将其用作Spring Cloud Zookeeper的服务注册表和配置源。

1.1. 发现客户端的使用

要在应用程序中使用这些功能,您可以将其构建为依赖于 and 的 Spring 引导应用程序。 添加依赖项的最方便方法是使用 Spring Boot 启动器: 我们建议使用依赖项管理和。 以下示例显示了典型的 Maven 配置:​​spring-cloud-zookeeper-core​​​​spring-cloud-zookeeper-discovery​​​​org.springframework.cloud:spring-cloud-starter-zookeeper-discovery​​​​spring-boot-starter-parent​

绒球.xml

<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-zookeeper-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 设置:

build.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-zookeeper-discovery'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}

根据您使用的版本,您可能需要调整项目中使用的 Apache Zookeeper 版本。 您可以在安装 Zookeeper 部分阅读更多相关信息。

现在,您可以创建一个标准的 Spring 引导应用程序,例如以下 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服务器运行时,它将连接到Zookeeper,后者在默认本地端口(2181)上运行。 若要修改启动行为,可以使用 更改 Zookeeper 的位置,如以下示例所示:​​application.properties​

spring:
cloud:
zookeeper:
connect-string: localhost:2181

现在,您可以使用 or、or 从 Zookeeper 检索服务和实例数据,如以下示例所示:​​DiscoveryClient​​​​@LoadBalanced RestTemplate​​​​@LoadBalanced WebClient.Builder​

@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. 分布式配置使用

要在应用程序中使用这些功能,您可以将其构建为依赖于 and 的 Spring 引导应用程序。 添加依赖项的最方便方法是使用 Spring Boot 启动器: 我们建议使用依赖项管理和。 以下示例显示了典型的 Maven 配置:​​spring-cloud-zookeeper-core​​​​spring-cloud-zookeeper-config​​​​org.springframework.cloud:spring-cloud-starter-zookeeper-config​​​​spring-boot-starter-parent​

绒球.xml

<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-zookeeper-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 设置:

build.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-zookeeper-config'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}

根据您使用的版本,您可能需要调整项目中使用的 Apache Zookeeper 版本。 您可以在安装 Zookeeper 部分阅读更多相关信息。

现在,您可以创建一个标准的 Spring 引导应用程序,例如以下 HTTP 服务器:

@SpringBootApplication
@RestController
public class Application {

@GetMapping("/")
public String home() {
return "Hello World!";
}

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}

}

应用程序从 Zookeeper 检索配置数据。

如果使用 Spring Cloud Zookeeper Config,则需要设置属性才能绑定到 Zookeeper。 您可以在Spring 引导配置数据导入部分​阅读更多相关信息。​​spring.config.import​

2. 安装动物园管理员

查看安装 有关如何安装 Zookeeper 的说明的文档。

Spring Cloud Zookeeper在幕后使用Apache策展人。 虽然 Zookeeper 3.5.x 仍然被 Zookeeper 开发团队视为“测试版”, 现实情况是,它被许多用户用于生产。 但是,Zookeeper 3.4.x也用于生产。 在 Apache Curator 4.0 之前,两个版本的 Zookeeper 都通过两个版本的 Apache Curator 提供支持。 从 Curator 4.0 开始,两个版本的 Zookeeper 都通过相同的 Curator 库提供支持。

如果您要与3.4版本集成,则需要更改Zookeeper依赖项 随之而来的,因此。 为此,只需排除该依赖项并添加如下所示的 3.4.x 版本。​​curator​​​​spring-cloud-zookeeper​

马文

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-all</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.12</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>

格拉德尔

compile('org.springframework.cloud:spring-cloud-starter-zookeeper-all') {
exclude group: 'org.apache.zookeeper', module: 'zookeeper'
}
compile('org.apache.zookeeper:zookeeper:3.4.12') {
exclude group: 'org.slf4j', module: 'slf4j-log4j12'
}

3. 使用动物园管理员进行服务发现

服务发现是基于微服务的架构的关键原则之一。试图 手动配置每个客户端或某种形式的约定可能很难做到,并且可能 脆。Curator(一个用于Zookeeper的Java库)提供服务 通过服务发现进行发现 扩展。春云动物园管理员使用此扩展进行服务注册和 发现。

3.1. 激活

包括依赖项使能 设置Spring Cloud Zookeeper Discovery的自动配置。​​org.springframework.cloud:spring-cloud-starter-zookeeper-discovery​

对于 Web 功能,您仍然需要包含。​​org.springframework.boot:spring-boot-starter-web​

使用Zookeeper的3.4版本时,您需要更改 包含依赖项的方式,如此处所述。

3.2. 向动物园管理员注册

当客户端向 Zookeeper 注册时,它会提供元数据(例如主机和端口、ID、 和名称)关于它自己。

以下示例显示了一个 Zookeeper 客户端:

@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 引导应用程序。

如果 Zookeeper 位于其他位置,则配置必须 提供服务器的位置,如以下示例所示:​​localhost:2181​

应用程序.yml

spring:
cloud:
zookeeper:
connect-string: localhost:2181

如果您使用Spring Cloud Zookeeper Config​,则 前面示例中显示的值需要代替。​​bootstrap.yml​​​​application.yml​

默认的服务名称、实例 ID 和端口(取自)分别是 Spring 上下文 ID 和。​​Environment​​​​${spring.application.name}​​​​${server.port}​

具有类路径使应用程序同时进入两者 一个 Zookeeper “服务”(即它自己注册)和一个“客户端”(即它可以 查询动物园管理员以查找其他服务)。​​spring-cloud-starter-zookeeper-discovery​

如果您想禁用Zookeeper Discovery Client,您可以设置。​​spring.cloud.zookeeper.discovery.enabled​​​​false​

3.3. 使用发现客户端

Spring Cloud支持Feign(REST客户端构建器),Spring RestTemplate和Spring WebFlux,使用逻辑服务名称而不是物理URL。

你也可以使用, 为发现客户端提供了一个简单的 API,该 API 并非特定于 Netflix,如 以下示例:​​org.springframework.cloud.client.discovery.DiscoveryClient​

@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;
}

4. 将春云动物园管理员与春云组件一起使用

Feign,Spring Cloud Gateway和Spring Cloud LoadBalancer都可以与Spring Cloud Zookeeper配合使用。

4.1. 带有 Zookeeper 的 Spring Cloud LoadBalancer

Spring Cloud Zookeeper 提供了 Spring Cloud LoadBalancer 的实现。 当您使用时,Spring Cloud LoadBalancer会自动配置为默认使用。​​ServiceInstanceListSupplier​​​​spring-cloud-starter-zookeeper-discovery​​​​ZookeeperServiceInstanceListSupplier​

如果您之前在 Zookeeper 中使用过 StickyRule,那么它在当前堆栈中的替换 是 SC 负载均衡器。您可以在Spring Cloud Commons文档中​阅读如何设置它。​​SameInstancePreferenceServiceInstanceListSupplier​

5. 春云动物园管理员和服务注册

春云动物园守护者实现接口,让开发者 以编程方式注册任意服务。​​ServiceRegistry​

Theclass 提供了一种方法来创建可由 使用的对象,如下所示 例:​​ServiceInstanceRegistration​​​​builder()​​​​Registration​​​​ServiceRegistry​

@Autowired
private ZookeeperServiceRegistry serviceRegistry;

public void registerThings() {
ZookeeperRegistration registration = ServiceInstanceRegistration.builder()
.defaultUriSpec()
.address("anyUrl")
.port(10)
.name("/a/b/c/d/anotherservice")
.build();
this.serviceRegistry.register(registration);
}

5.1. 实例状态

Netflix Eureka 支持拥有向服务器注册的实例。 这些实例不会作为活动服务实例返回。 这对于蓝/绿部署等行为非常有用。 (请注意,鉴赏者服务发现配方不支持此行为。利用灵活的有效负载,Spring Cloud Zookeeper 通过更新一些特定的元数据,然后在 Spring Cloud Load Balancer 中过滤该元数据来实现。 筛选出所有不相等的非 null 实例状态。 如果实例状态字段为空,则认为这是为了向后兼容。 要更改实例的状态,请创建实例状态执行器端点,如以下示例所示:​​OUT_OF_SERVICE​​​​OUT_OF_SERVICE​​​​ZookeeperServiceInstanceListSupplier​​​​ZookeeperServiceInstanceListSupplier​​​​UP​​​​UP​​​​POST​​​​OUT_OF_SERVICE​​​​ServiceRegistry​

$ http POST http://localhost:8081/service-registry status=OUT_OF_SERVICE

前面的示例使用httpie.org​ 中的命令。​​http​

6. 动物园管理员依赖关系

以下主题介绍如何使用 Spring Cloud Zookeeper 依赖项:

  • 使用 Zookeeper 依赖项
  • 激活动物园管理员依赖项
  • 设置 Zookeeper 依赖项
  • 配置春云动物园管理员依赖

6.1. 使用动物园管理员依赖项

Spring Cloud Zookeeper 为您提供了提供应用程序依赖项的可能性 作为属性。作为依赖项,您可以了解已注册的其他应用程序 在 Zookeeper 中,您想通过Feign(一个 REST 客户端构建器)、Spring RestTemplate和Spring WebFlux 调用它。

您还可以使用 Zookeeper 依赖项观察器功能来控制和监视 依赖项的状态。

6.2. 激活动物园管理员依赖项

包括依赖项使能 设置Spring Cloud Zookeeper Dependencies的自动配置。即使您提供 属性中的依赖项,可以关闭依赖项。为此,请将属性设置为 false(默认为 )。​​org.springframework.cloud:spring-cloud-starter-zookeeper-discovery​​​​spring.cloud.zookeeper.dependency.enabled​​​​true​

6.3. 设置动物园管理员依赖项

请考虑以下依赖项表示示例:

应用程序.yml

spring.application.name: yourServiceName
spring.cloud.zookeeper:
dependencies:
newsletter:
path: /path/where/newsletter/has/registered/in/zookeeper
loadBalancerType: ROUND_ROBIN
contentTypeTemplate: application/vnd.newsletter.$version+json
version: v1
headers:
header1:
- value1
header2:
- value2
required: false
stubs: org.springframework:foo:stubs
mailing:
path: /path/where/mailing/has/registered/in/zookeeper
loadBalancerType: ROUND_ROBIN
contentTypeTemplate: application/vnd.mailing.$version+json
version: v1
required: true

接下来的几节将逐一介绍依赖项的每个部分。根属性 名字是。​​spring.cloud.zookeeper.dependencies​

6.3.1. 别名

在根属性下,您必须将每个依赖项表示为别名。 这是由于Spring Cloud LoadBalancer的约束,它要求将应用程序ID放在URL中。 因此,您不能传递任何复杂的路径,例如)。 别名是您使用的名称,而不是 for、或。​​/myApp/myRoute/name​​​​serviceId​​​​DiscoveryClient​​​​Feign​​​​RestTemplate​

在前面的示例中,别名是 areand。 以下示例显示了 aalias 的 Feign 用法:​​newsletter​​​​mailing​​​​newsletter​

@FeignClient("newsletter")
public interface NewsletterService {
@RequestMapping(method = RequestMethod.GET, value = "/newsletter")
String getNewsletters();
}

6.3.2. 路径

该路径由 YAML 属性表示,并且是在 Zookeeper 下注册依赖项的路径。 如上一节所述,Spring Cloud LoadBalancer 在 URL 上运行。 因此,此路径不符合其要求。 这就是为什么春云动物园管理员将别名映射到正确的路径。​​path​

6.3.3. 负载均衡器类型

负载均衡器类型由 YAML 属性表示。​​loadBalancerType​

如果您知道在调用此特定依赖项时必须应用哪种负载平衡策略,则可以在 YAML 文件中提供它,它会自动应用。 您可以选择以下负载平衡策略之一:

  • 粘性:选择后,始终调用实例。
  • 随机:随机选取一个实例。
  • ROUND_ROBIN:一遍又一遍地迭代实例。

6.3.4.内容类型模板和版本

模板和版本由 andYAML 属性表示。​​Content-Type​​​​contentTypeTemplate​​​​version​

如果在标头中对 API 进行版本控制,则不希望添加此标头 满足您的每个请求。此外,如果要调用新版本的 API,则不要 想要在您的代码中漫游以提高 API 版本。这就是为什么您可以提供一个特殊的占位符。该占位符将由 YAML 属性的值填充。请考虑以下示例:​​Content-Type​​​​contentTypeTemplate​​​​$version​​​​version​​​​contentTypeTemplate​

application/vnd.newsletter.$version+json

进一步考虑以下事项:​​version​

v1

和版本的组合导致为每个请求创建标头,如下所示:​​contentTypeTemplate​​​​Content-Type​

application/vnd.newsletter.v1+json

6.3.5. 默认标头

默认标头由 YAML 中的映射表示。​​headers​

有时,每次调用依赖项都需要设置一些默认标头。为了不 在代码中执行此操作,可以在 YAML 文件中设置它们,如以下示例部分所示:​​headers​

headers:
Accept:
- text/html
- application/xhtml+xml
Cache-Control:
- no-cache

该部分导致添加带有 HTTP 请求中的相应值列表。​​headers​​​​Accept​​​​Cache-Control​

6.3.6. 必需的依赖项

所需的依赖项在 YAML 中按属性表示。​​required​

如果在应用程序启动时需要启动其中一个依赖项,则可以设置 YAML 文件中的属性。​​required: true​

如果应用程序无法在启动期间本地化所需的依赖项,则会引发 异常,并且 Spring 上下文无法设置。换句话说,您的应用程序不能 如果所需的依赖项未在 Zookeeper 中注册,则启动。

您可以在本文档后面阅读有关Spring Cloud Zookeeper Presence Checker的更多信息。

6.3.7. 存根

您可以提供包含依赖项存根的 JAR 的冒号分隔路径,如 如以下示例所示:

​stubs: org.springframework:myApp:stubs​

哪里:

  • ​org.springframework​​是的。groupId
  • ​myApp​​ is the .artifactId
  • ​stubs​​ is the classifier. (Note that is the default value.)stubs

因为是默认分类器,前面的示例等于下面的 例:​​stubs​

​stubs: org.springframework:myApp​

6.4. 配置春云动物园管理员依赖

您可以设置以下属性来启用或禁用部分 Zookeeper 依赖项功能:

  • ​spring.cloud.zookeeper.dependencies​​:如果未设置此属性,则无法使用 Zookeeper 依赖项。
  • ​spring.cloud.zookeeper.dependency.loadbalancer.enabled​​(默认启用):启用特定于 Zookeeper 的自定义负载平衡策略,包括基于依赖项的负载平衡设置。ZookeeperServiceInstanceListSupplierRestTemplate
  • ​spring.cloud.zookeeper.dependency.headers.enabled​​(默认启用):此属性注册自动将相应的标头和内容类型追加其版本,如依赖项配置所示。 如果没有此设置,这两个参数将不起作用。FeignBlockingLoadBalancerClient
  • ​spring.cloud.zookeeper.dependency.resttemplate.enabled​​(默认启用):启用后,此属性将修改 a-annotateded 的请求标头,以便它使用依赖项配置中设置的版本传递标头和内容类型。 如果没有此设置,这两个参数将不起作用。@LoadBalancedRestTemplate

7. 春云动物园管理员依赖观察者

依赖项观察程序机制允许您将侦听器注册到依赖项。这 功能实际上是模式的实现。当一个 依赖关系发生变化,其状态(UP 或 DOWN),可以应用一些自定义逻辑。​​Observator​

7.1. 激活

需要启用 Spring Cloud Zookeeper 依赖项功能才能使用 依赖关系观察程序机制。

7.2. 注册监听器

要注册侦听器,必须实现一个调用的接口和 将其注册为 Bean。该界面为您提供了一种方法:​​org.springframework.cloud.zookeeper.discovery.watcher.DependencyWatcherListener​

void stateChanged(String dependencyName, DependencyState newState);

如果要为特定依赖项注册侦听器,则会 成为您具体实施的鉴别器。为您提供 有关依赖项是否已更改 Toor 的信息。​​dependencyName​​​​newState​​​​CONNECTED​​​​DISCONNECTED​

7.3. 使用状态检查器

与依赖关系观察程序绑定的是称为状态检查器的功能。它让 在应用程序启动时提供自定义行为,以根据状态做出反应 的依赖项。

抽象类的默认实现是, 其工作方式如下。​​org.springframework.cloud.zookeeper.discovery.watcher.presence.DependencyPresenceOnStartupVerifier​​​​org.springframework.cloud.zookeeper.discovery.watcher.presence.DefaultDependencyPresenceOnStartupVerifier​

  1. 如果依赖项标记为us并且不在Zookeeper中,则当您的应用程序 靴子,它会引发异常并关闭。required
  2. 如果依赖项不是,则记录该级别缺少依赖项。requiredorg.springframework.cloud.zookeeper.discovery.watcher.presence.LogMissingDependencyCheckerWARN

因为只有当有 没有类型的 bean,此功能可以是 重写。​​DefaultDependencyPresenceOnStartupVerifier​​​​DependencyPresenceOnStartupVerifier​

8. 使用动物园管理员进行分布式配置

Zookeeper 提供了一个分层命名空间,允许客户端存储任意数据,例如配置数据。春云动物园管理员 配置是配置服务器和客户端的替代方法。 配置在特殊的“引导程序”期间加载到 Spring 环境中 阶段。默认情况下,配置存储在命名空间中。根据应用程序的名称和活动创建多个实例 配置文件,以模拟解析属性的 Spring 云配置顺序。例如,一个 名称为 和 具有配置文件的应用程序具有以下属性 为其创建的来源:​​/config​​​​PropertySource​​​​testApp​​​​dev​

  • ​config/testApp,dev​
  • ​config/testApp​
  • ​config/application,dev​
  • ​config/application​

最具体的属性源位于顶部,最不具体的属性源位于底部。 命名空间中的属性适用于使用 动物园管理员进行配置。命名空间中的属性可用 仅对命名的服务实例。​​config/application​​​​config/testApp​​​​testApp​

配置当前在应用程序启动时读取。发送 HTTPrequest 会导致重新加载配置。观察配置 命名空间(Zookeeper 支持)当前未实现。​​POST​​​​/refresh​

8.1. 激活

包括依赖项使能 设置Spring Cloud Zookeeper Config的自动配置。​​org.springframework.cloud:spring-cloud-starter-zookeeper-config​

使用Zookeeper的3.4版本时,您需要更改 包含依赖项的方式,如此处所述。

8.2. Spring 引导配置数据导入

Spring Boot 2.4引入了一种通过属性导入配置数据的新方法。现在,这是从Zookeeper获取配置的默认方式。​​spring.config.import​

要选择性地连接到 Zookeeper 进行配置,请在 application.properties 中设置以下内容:

应用程序属性

spring.config.import=optional:zookeeper:

这将在默认位置“localhost:2181”连接到 Zookeeper。删除前缀将导致 Zookeeper 配置失败,如果它无法连接到 Zookeeper。要更改 Zookeeper 配置的连接属性,请将 setor 将连接字符串添加到语句中,例如,。导入属性中的位置优先于该属性。​​optional:​​​​spring.cloud.zookeeper.connect-string​​​​spring.config.import​​​​spring.config.import=optional:zookeeper:myhost:2818​​​​connect-string​

Zookeeper Config 将尝试从四个基于(默认为属性值)和(默认为)的自动上下文中加载值。如果要指定上下文而不是使用计算上下文,可以将该信息添加到语句中。​​spring.cloud.zookeeper.config.name​​​​spring.application.name​​​​spring.cloud.zookeeper.config.default-context​​​​application​​​​spring.config.import​

应用程序属性

spring.config.import=optional:zookeeper:myhost:2181/contextone;/context/two

这将选择仅从和加载配置。​​/contextone​​​​/context/two​

导入方式的 Spring 引导配置数据方法不需要文件(属性或 yaml)。​​bootstrap​​​​spring.config.import​

8.3. 定制

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

spring:
cloud:
zookeeper:
config:
enabled: true
root: configuration
defaultContext: apps
profileSeparator: '::'
  • ​enabled​​:设置此值以禁用动物园管理员配置。false
  • ​root​​:设置配置值的基本命名空间。
  • ​defaultContext​​:设置所有应用程序使用的名称。
  • ​profileSeparator​​:设置用于分隔配置文件名称的分隔符的值 具有配置文件的属性源。

如果您有 setor 或包含,则需要放置上述值来代替。​​spring.cloud.bootstrap.enabled=true​​​​spring.config.use-legacy-processing=true​​​​spring-cloud-starter-bootstrap​​​​bootstrap.yml​​​​application.yml​

8.4. 访问控制列表

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

@BoostrapConfiguration
public class CustomCuratorFrameworkConfig {

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

}

請參閱ZookeeperAutoConfiguration 類別,看看 thebean 的預設配置方式。​​CuratorFramework​

或者,您可以从依赖于现有 Bean 的类中添加凭据,如以下示例所示:​​CuratorFramework​

@BoostrapConfiguration
public class DefaultCuratorFrameworkConfig {

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

}

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

资源/META-INF/spring.factory

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

标签:zookeeper,Spring,Zookeeper,Cloud,spring,org,cloud
From: https://blog.51cto.com/u_15326439/5911472

相关文章

  • springmvc注册fastJson报错
    原因:依赖版本问题这是我原本引入的依赖,版本是1.2.24<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId......
  • spring-boot-@Valid和@Validated详解
    ----------------------------------------------------------------------------------------在实际的项目开发中,经常会遇到对参数进行校验的场景,最常见的就是后端需要对......
  • spring学习小结之:hibernatetemplate,过度封装?
    边学spring,突然发现之前spring与hibernate结合的方式可以更厉害地封装,那就是用hibernateTemplate了,只需要改边userdao.java如下importorg.springfr......
  • spring mvc3及mvc 3.2中的异常处理小结
    在springmvc3中,处理异常的是试用exceptionresolver去做异常,先来个简单DEMO看下:1)自定义异常类publicclassSpringExceptionextendsRuntime......
  • Spring中配合hibernate使用的简单例子
    最近在看SPRING和hibernate,学习了spring和hibernate之间整合,下面举出一个例子予以说明.    首先,可以注入的是sessionfactory,因为sessionfactory的Datasource可以......
  • spring 3 jdbc常用小结
    spring3的jdbc跟springmvc搭配起来挺好用的,本文试着小结其主要使用方法,并举出spring3.3.2中的一些信变化进行解析1)在dao中注入jdbctemplate,然后......
  • spring mvc中的拦截器小结
    在springmvc中,拦截器其实比较简单了,下面简单小结并demo下。preHandle:预处理回调方法,实现处理器的预处理(如登录检查),第三个参数为响应的处理器(如我们......
  • WGCLOUD 的基本知识 - agent自动识别的IP不准确,如何处理
    部署完成WGCLOUD监控平台后,当agent自动获取主机IP不准确时,如何手动配置agent主机IP说明有时候agent自动获取的主机IP不一定准确,这时可以手动配置下agent主机IP,手动配置后......
  • springboot_02
    1.修改配置 ky格式修改配置文件  1.1application.yml格式(一般用这种格式) ......
  • Spring实例化bean的方法
    Spring实例化bean的方法主要有四种:通过构造方法实例化bean,使用静态工厂实例化bean,使用实例工厂实例化bean,使用FactoryBean实例化bean。前三种了解即可,使用FactoryBean实例......