[Spring Cloud] 3.3 Spring Cloud Config 配置(第四部分)

本文详细介绍了Spring Cloud Config客户端的多种配置方式,包括通过Bootstrap机制配置、服务发现机制配置、Fail-Fast机制配置及重试机制配置等,并深入探讨了如何定位远程配置资源及安全配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3.7 Spring Cloud Config Client 客户端

一个Spring Boot能够很方便的使用Config Server,仅需要改改配置就行。而且开启Config Server后还可以通过Environment事件机制获得一些额外的功能。

3.7.1 Config First Bootstrap 首先配置Bootstrap

对于classpath中任何一个Config Server 客户端应用来说,Bootstrap是一个默认的机制。基于Bootstrap机制,客户端在启动时会自动绑定Config Server(通过spring.cloud.config.uri配置项),然后,加载远程资源来初始化Environment

所有的客户端想要去使用Config Server,需要通过bootstrap.yml(或者环境变量)配置一个spring.cloud.config.uri来指定服务端地址(默认:http://localhost:8888

3.7.2 Discovery First Bootstrap 服务发现

如果使用了DiscoveryClient实现,如Spring Cloud Netflix / Eureka 的服务发现,或者是Spring Cloud Consul(Spring Cloud Zookeeper 暂不支持此功能),那么可以把你想要的Config Server注册到Discovery Service。但是,对于默认情况第一次加载配置时,客户端还是享用不了注册的服务,所以基本配置信息还是按照传统的方式被加载。

如果你比较喜欢用DiscoveryClient来使用Config Server,那你可以通过配置spring.cloud.config.discovery.enabled=true(默认false)来开启此功能。这样的结果就是,所有的客户端都会从发现的配置服务加载一个bootstrap.yml或者环境变量。

例如:在Spring Cloud Netflix实现中,需要顶一个Eureka服务地址,如:eureka.client.serviceUrl.defaultZone。这样的代价就是在启动时产生一次额外的网络请求,用于注册本地服务。带来的好处是,只要Discovery Service不变,那 Config Server 可以随意迁移。可以为客户端指定一个id:spring.cloud.config.discovery.serviceId,服务通常通过spring.application.name来指定服务名,默认的配置服务ID:"configserver"

Discovery客户端实现基本都支持一些元数据。如Eureka :eureka.instance.metadataMap。有的时候Config Server会有一些额外的配置信息需要加入到服务注册的元数据中,来让客户端能够正确的建立连接。如果Config Server 使用了HTTP的基础安全策略,那可以配置'username'和'password'。还可以通过"configPath"为Config Server指定一个context path。 例如:Eureka客户端

bootstrap.yml

eureka:
  instance:
    ...
    metadataMap:
      user: osufhalskjrtl
      password: lviuhlszvaorhvlo5847
      configPath: /config

3.7.3 Config Client Fail Fast 客户端Fail-Fast

有的时候,需要当Config Server 连接不上的时直接启动失败。如果需要这个特性可以设置bootstrap配置项:spring.cloud.config.failFast=true来开启。

3.7.4 Config Client Retry 客户端重试

对于客户端,除了上一节所说的直接失败,还可以在Config Server不可用时,让客户端重试。可以通过设置spring.cloud.config.failFast=false;在classpath中增加spring-retryspring-boot-starter-aop依赖。默认情况下会重试6次,每次间隔(1000 * 1.1^n)ms。也可以通过spring.cloud.config.retry.*系列配置来修改相关配置。

提示: 要完全控制重试策略,可以自己实现一个RetryOperationsInterceptor指定Bean ID:"configServerRetryInterceptor"。Spring提供了一个RetryInterceptorBuilder可以快速构建一个RetryOperationsInterceptor。

3.7.5 Locating Remote Configuration Resources 查找远程配置资源

Config Service配置的属性:/{name}/{profile}/{label},默认会被绑定到客户端:

  • "name" = ${spring.application.name}
  • "profile" = ${spring.profiles.active} (相当于 Environment.getActiveProfiles())
  • "label" = "master"

这些都可以通过spring.cloud.config.*(* 可以包括:"name", "profile", "label")配置项进行覆盖。 "label"会被用于配置信息版本回滚,按默认实现"label"相对于git的label,branch名,或者commit id。"label"可以用逗号分隔,这种情况,会一个接一个的尝试,直到成功。这种比较适合针对多环境进行配置管理服务时,例如:spring.cloud.config.label=myfeature,develop

3.7.6 Security 安全

基于HTTP Basic安全策略,可以这样配置:

bootstrap.yml

spring:
  cloud:
    config:
     uri: https://user:secret@myconfig.mycompany.com

或者:

bootstrap.yml

spring:
  cloud:
    config:
     uri: https://myconfig.mycompany.com
     username: user
     password: secret

spring.cloud.config.passwordspring.cloud.config.username会覆盖URI中的用户名和密码。

如果应用发布到Cloud Foundry的话,那最佳的方式就是通过服务证书的方式提供密码。例如:

bootstrap.yml

spring:
  cloud:
    config:
     uri: ${vcap.services.configserver.credentials.uri:http://user:password@localhost:8888}

也可以自己来实现安全策略,可以自己提供一个RestTemplate到ConfigServicePropertySourceLocator中

转载于:https://my.oschina.net/roccn/blog/727991

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值