前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >教程系列(二):Spring Cloud Tencent 使用配置中心管理配置

教程系列(二):Spring Cloud Tencent 使用配置中心管理配置

原创
作者头像
小乐兜
发布2022-06-15 15:25:20
1.5K0
发布2022-06-15 15:25:20
举报
文章被收录于专栏:Spring Cloud TencentSpring Cloud Tencent

导读:当应用的配置多了之后,往往需要配置中心来管理配置的生命周期,例如修改、发布、版本管理、回滚、多集群管理等。另外也经常遇到需要动态下发配置的场景,例如开关、业务参数等等。本文主要介绍 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

方式二:使用北极星开源提供的体验环境

方式三:使用腾讯云北极星服务

腾讯云提供了免运维的北极星云服务,基于云服务可以快速开通生产级高可用北极星集群 了解更多

第二步:引入 Spring Cloud Tencent Config 依赖

  1. 参考 Spring Cloud Tencent 版本管理 文档获取最新的版本号,引入 Spring Cloud Tencent Bom,例如:
代码语言:javascript
复制
<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>
  1. 引入 Spring Cloud Tencent Config Starter
代码语言:javascript
复制
<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 用于指定配置中心的地址。

如下所示:

代码语言:javascript
复制
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,如下所示:

代码语言:javascript
复制
spring:
  cloud:
    polaris:
      config:
        groups:
          - name: ${spring.application.name} # 选填,注入自定义配置的配置分组
            files: [ "config/application.properties", "config/bootstrap.yml" ] # 注入自定义配置文件列表,当 key 冲突时,排在前面的配置文件优先级高于后面

第四步:代码里使用配置

1. 通过 @Value 注入

代码语言:javascript
复制
@Value("${timeout:1000}")
private int timeout;

2. 通过 @ConfigurationProperties 注入

代码语言:javascript
复制
@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

是否连接到远程北极星配置中心服务端,当没有网络环境或者无北极星服务端时可关闭

北极星配置中心原理介绍

客户端端视角

  1. 应用启动时,同步从服务端拉取一次配置,获取最新的配置内容
  2. 把第一步拉取到的所有的配置文件生成 List<File->Version> 的数据 ,并向服务端发送订阅配置请求,请求内容为 List<File->Version>
  3. 当收到配置文件的推送消息时,向服务端拉取最新的配置文件

订阅配置服务端视角

  1. 先检查客户端 List<File->Version> 的请求里是否存在 File 版本号落后,如果存在,则立马响应 File -> NewVersion 内容给客户端
  2. 如果客户端配置文件版本号都是最新的,则在内存里维护 File -> List<Client> 的数据结构并 Hold 请求 30s。如果 30s 内有配置文件发布,则立马响应请求,返回 File -> NewVersion 给所有客户端

发布推送配置简化流程

  1. 用户在界面点击发布按钮,服务端更新数据库里配置发布表的数据。配置发布表的核心字段:file, version, content, mtime
  2. 每个北极星服务端实例,都会定时1s扫描配置发布表,根据 mtime 捞出最近 1s 内变更过的数据
  3. 北极星服务端实例扫描到最新变更的数据之后
  • 重新加载内存缓存
  • 向内存里的消息发布管道里写入一条消息
  1. 推送协程从消息发布管道里获取到消息,并消费消息。通过 File -> List<Client> 信息,获取所有订阅配置文件的客户端信息,并响应客户端 Hold 的请求。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 模块简介
  • 快速入门
    • 第一步:引入 Polaris 服务端
      • 方式一:搭建本地北极星服务
      • 方式二:使用北极星开源提供的体验环境
      • 方式三:使用腾讯云北极星服务
    • 第二步:引入 Spring Cloud Tencent Config 依赖
      • 第三步:增加 Spring Cloud Tencent Config Starter 的配置文件
        • 1. 配置 Polaris 配置中心地址
        • 2. 注入配置文件
      • 第四步:代码里使用配置
        • 1. 通过 @Value 注入
        • 2. 通过 @ConfigurationProperties 注入
      • 第五步:在北极星控制台添加配置文件
        • 1. 创建 Namespace
        • 2. 创建配置文件分组
        • 3. 创建并发布配置文件
      • 第六步:启动应用
        • 第七步: 实现动态刷新配置能力
        • 完整的配置参数
        • 北极星配置中心原理介绍
        相关产品与服务
        微服务引擎 TSE
        微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档