导读:当利用的配置多了之后,往往须要配置核心来治理配置的生命周期,例如批改、公布、版本治理、回滚、多集群治理等。另外也常常遇到须要动静下发配置的场景,例如开关、业务参数等等。本文次要介绍 Spring Cloud Tencent 如何集成北极星配置核心。
Github 地址: Spring Cloud Tencent
模块简介
配置核心模块是 Spring Cloud Tencent 最外围的模块之一,实现了 Spring Cloud PropertySourceLoader SPI 接口 (PolarisConfigFileLocator.java)。
在利用启动 Bootstrap 阶段,Spring Cloud 会调用 PolarisConfigFileLocator 从 Polaris 服务端获取配置文件并加载到 Spring 上下文里。通过 Spring Boot 规范的 @Value
,@ConfigurationProperties
注解即可获取配置内容。
动静配置刷新能力,则通过 Spring Cloud 规范的 @RefreshScope
机制实现。
留神:因为 Spring Cloud PropertySourceLoader SPI 是在 Bootstrap 阶段调用,所以 Polaris Config 相干的配置内容(例如 Polaris 服务地址)须要放在 bootstrap.yml 文件里,而不能放在 application.yml 文件里,否则会初始化失败。
疾速入门
本章节将介绍如何在 Spring Cloud 我的项目中应用 Spring Cloud Tencent Config 的性能。
残缺 Example 代码请参考:polaris-config-example
第一步:引入 Polaris 服务端
形式一:搭建本地北极星服务
搭建北极星服务请参考 Polaris Getting Started
形式二:应用北极星开源提供的体验环境
-
Console Address : http://14.116.241.63:8080/
- Username: polaris
- Password: polaris
-
Server Address:
grpc://183.47.111.80:8091
形式三:应用腾讯云北极星服务
腾讯云提供了免运维的北极星云服务,基于云服务能够疾速开明生产级高可用北极星集群 理解更多
第二步:引入 Spring Cloud Tencent Config 依赖
- 参考 Spring Cloud Tencent 版本治理 文档获取最新的版本号,引入 Spring Cloud Tencent Bom,例如:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-tencent-dependencies</artifactId>
<version>1.5.0-Hoxton.SR9</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
-
引入 Spring Cloud Tencent Config Starter
<dependency> <groupId>com.tencent.cloud</groupId> <artifactId>spring-cloud-starter-tencent-polaris-config</artifactId> </dependency>
第三步:减少 Spring Cloud Tencent Config Starter 的配置文件
在您我的项目的
bootstrap.yml
配置文件中退出以下配置内容,留神肯定要放在bootstrap.yml
里。
外围配置内容为配置北极星服务端地址以及注入的配置文件信息1. 配置 Polaris 配置核心地址
如果您应用的北极星配置核心和注册核心是同一套北极星集群,则只需配置
spring.cloud.polaris.address
即可。
如果您部署了两套北极星集群,别离用于注册核心和配置核心,则spring.cloud.polaris.address
用于指定注册核心集群的地址,spring.cloud.polaris.config.address
用于指定配置核心的地址。
如下所示:spring: application: name: ${application.name} cloud: polaris: address: grpc://${批改为第一步部署的 Polaris 服务地址}:8091 # 必填 namespace: default # 全局 namespace 参数 config: address: grpc://${独立的配置核心}:8093 # 选填,只有在配置核心和注册核心是两个不同的地址时才须要配置 auto-refresh: true # 选填,当配置公布后,动静刷新 Spring 上下文,默认值为 true 面
2. 注入配置文件
咱们举荐的最佳实际是在北极星管控端创立一个名为以后利用名(
${spring.application.name}
)的配置分组,Spring Cloud Tencent Config 会主动注入以后利用名分组下的
application-${activeProfile}.properties
application-${activeProfile}.yml
application.properties
application.yml
bootstrap-${activeProfile}.properties
bootstrap-${activeProfile}.yml
bootstrap.properties
-
bootstrap.yml
优先级从上到下顺次升高
留神:是 yml 后缀,而不是 yaml
主动注入以上配置文件合乎 Spring Boot 的标准,可能满足绝大部分利用场景了。
只有当您须要注入额定自定义的配置文件时,才须要在 bootstrap.yml
里配置 spring.cloud.polaris.config.groups
,如下所示:
spring:
cloud:
polaris:
config:
groups:
- name: ${spring.application.name} # 选填,注入自定义配置的配置分组
files: ["config/application.properties", "config/bootstrap.yml"] # 注入自定义配置文件列表,当 key 抵触时,排在后面的配置文件优先级高于前面
第四步:代码里应用配置
1. 通过 @Value
注入
@Value("${timeout:1000}")
private int timeout;
2. 通过 @ConfigurationProperties
注入
@RefreshScope
@Component
@ConfigurationProperties(prefix = "teacher")
public class Person {
private String name;
private int age;
String getName() {return name;}
void setName(String name) {this.name = name;}
int getAge() {return age;}
void setAge(int age) {this.age = age;}
@Override
public String toString() {return "User{" + "name='" + name + '\'' + ", age=" + age + '}';
}
}
第五步:在北极星控制台增加配置文件
1. 创立 Namespace
Namespace 为北极星里外围的概念,通过 Namespace 逻辑隔离资源,例如通常用于标识不同的环境、不同的集群。
2. 创立配置文件分组
北极星的配置文件分组概念为一组配置文件的汇合,举荐把利用名作为一个分组名,例如在咱们的示例中,新建一个 polaris-config-example
的分组。
把 polaris-config-example
利用的配置文件都放在polaris-config-example
分组下,这样便于配置管理。
3. 创立并公布配置文件
北极星配置核心的控制台,配置文件名能够通过 / 来按树状目录构造展现,树状构造能够清晰的治理配置文件。例如一个利用下分不同的模块,每个模块都有独立的一组配置文件,则能够创立 module1/file1.properties
, module1/file2.yaml
, module2/file3.yaml
。
留神:配置文件名强烈建议带文件后缀,例如 .properties .yaml .yml .json 等。因为客户端会通过文件名后缀来解析文件内容,如果客户端发现不意识的后缀名则默认当做 .properties 文件解决。
配置好的实例如下图所示:
第六步:启动利用
到此接入 Spring Cloud Tencent Config 即已实现。
第七步:实现动静刷新配置能力
Spring Cloud 通过在配置变更的时候,重建 Bean 的形式实现动静刷新能力。通过以下两个步骤即可实现刷新能力:
步骤一:开启动静刷新开关(默认为关上状态)
在 bootstrap.yml
里配置 spring.cloud.polaris.config.auto-refresh=true
步骤二:给 Bean 打上 @RefreshScope
注解
残缺的配置参数
配置项 Key | 默认值 | 是否必填 | 配置项阐明 |
---|---|---|---|
spring.cloud.polaris.config.enabled | true | 否 | 是否开启配置模块 |
spring.cloud.polaris.config.address | 无 | 否 | 北极星服务端地址,可不填。当配置核心和注册核心为不同的地址时候才须要填写 |
spring.cloud.polaris.config.port | 8093 | 否 | 北极星配置核心的端口号,默认为 8093 |
spring.cloud.polaris.config.auto-refresh | true | 否 | 是否动静更新配置 |
spring.cloud.polaris.config.groups | 无 | 否 | 从北极星服务端获取自定义的配置文件 |
spring.cloud.polaris.config.connect-remote-server | true | 否 | 是否连贯到近程北极星配置核心服务端,当没有网络环境或者无北极星服务端时可敞开 |
北极星配置核心原理介绍
客户端端视角
- 利用启动时,同步从服务端拉取一次配置,获取最新的配置内容
- 把第一步拉取到的所有的配置文件生成
List<File->Version>
的数据,并向服务端发送订阅配置申请,申请内容为List<File->Version>
- 当收到配置文件的推送音讯时,向服务端拉取最新的配置文件
订阅配置服务端视角
- 先查看客户端
List<File->Version>
的申请里是否存在 File 版本号落后,如果存在,则立马响应File -> NewVersion
内容给客户端 - 如果客户端配置文件版本号都是最新的,则在内存里保护
File -> List<Client>
的数据结构并 Hold 申请 30s。如果 30s 内有配置文件公布,则立马响应申请,返回File -> NewVersion
给所有客户端
公布推送配置简化流程
- 用户在界面点击公布按钮,服务端更新数据库里配置公布表的数据。配置公布表的外围字段:
file, version, content, mtime
- 每个北极星服务端实例,都会定时 1s 扫描配置公布表,依据 mtime 捞出最近 1s 内变更过的数据
- 北极星服务端实例扫描到最新变更的数据之后
- 从新加载内存缓存
- 向内存里的音讯公布管道里写入一条音讯
- 推送协程从音讯公布管道里获取到音讯,并生产音讯。通过
File -> List<Client>
信息,获取所有订阅配置文件的客户端信息,并响应客户端 Hold 的申请。