教程系列(二):SpringCloud腾讯使用配置中心来管理配置集群管理等另外,我们经常会遇到需要动态分发配置的场景,比如交换机,业务参数等等。本文主要介绍SpringCloud腾讯如何集成Polaris配置中心。Github地址:SpringCloud腾讯模块介绍配置中心模块是SpringCloud腾讯的核心模块之一,实现了SpringCloudPropertySourceLoaderSPI接口(PolarisConfigFileLocator.java)。在应用启动的bootstrap阶段,SpringCloud会调用PolarisConfigFileLocator从Polaris服务器获取配置文件,加载到Spring上下文中。配置内容可以通过SpringBoot标准的@Value和@ConfigurationProperties注解获取。动态配置刷新能力是通过SpringCloud标准的@RefreshScope机制实现的。注意:由于在Bootstrap阶段调用了SpringCloudPropertySourceLoaderSPI,所以需要将PolarisConfig相关的配置内容(如Polaris服务地址)放在bootstrap.yml文件中,而不是放在application.yml文件中,否则初始化会失败。快速入门本章将介绍如何在SpringCloud项目中使用SpringCloudTencentConfig的功能。完整示例代码请参考:polaris-config-example第一步:引入Polaris服务器方法一:搭建本地Polaris服务搭建Polaris服务,请参考Polaris入门方法二:使用提供的体验环境byPolarisOpenSourceConsole地址:http://14.116.241.63:8080/用户名:polaris密码:polarisServer地址:grpc://183.47.111.80:8091方法三:使用腾讯云Polaris服务腾讯云免费提供PolarisCloud服务操作和维护。基于云服务,可快速启动生产详细了解高可用Polaris集群第二步:引入SpringCloudTencentConfig依赖参考SpringCloudTencent版本管理文档,获取最新版本号并引入SpringCloudTencentBom,对于示例:com.tencent.cloudspring-cloud-tencent-dependencies1.5.0-Hoxton.SR9pomimport引入SpringCloudTencentConfigStartercom.tencent.cloud<artifactId>spring-cloud-starter-tencent-polaris-config第三步:添加SpringCloudTencentConfigStarter的配置文件在你的bootstrap.yml配置文件中添加如下配置内容project注意一定要放在bootstrap.yml中。核心配置内容是配置Polaris服务器的地址和注入的配置文件信息。1、配置Polaris配置中心地址。需要配置spring.cloud.polaris.address。如果您分别为注册中心和配置中心部署了两个Polaris集群,spring.cloud.polaris.address用于指定注册中心集群地址,spring.cloud.polaris.config.address用于指定配置中心地址的地址。如下图:spring:application:name:${application.name}cloud:polaris:address:grpc://${修改为第一步部署的Polaris服务地址}:8091#requirednamespace:default#globalnamespace参数config:address:grpc://${独立配置中心}:8093#可选,只有当配置中心和注册中心是两个不同的地址时,auto-refresh:true#可选,当配置发布后,Spring上下文为动态刷新,默认为true。2、我们推荐的注入配置文件的最佳实践是在Polaris控制端创建一个名为当前应用名(${spring.application.name})的配置组,SpringCloudTencentConfig会自动注入application-${activeProfile当前应用名组下的}.propertiesapplication-${activeProfile}.ymlapplication.propertiesapplication.ymlbootstrap-${activeProfile}.propertiesbootstrap-${activeProfile}.ymlbootstrap.propertiesbootstrap.yml优先级从上到下依次降低。注意:上面配置文件自动注入的是yml后缀,不是yaml,符合SpringBoot规范,可以满足大部分应用场景。只有当需要注入额外的自定义配置文件时,才需要在bootstrap.yml中配置spring.cloud.polaris.config.groups,如下:spring:cloud:polaris:config:groups:-name:${spring.application.name}#可选,注入自定义配置配置组文件:["config/application.properties","config/bootstrap.yml"]#注入自定义配置文件列表,key冲突时,排前一个配置文件的优先级为高于第四步:使用代码中的配置1.通过@Value注入@Value("${timeout:1000}")privateinttimeout;2.通过@ConfigurationProperties注入@RefreshScope@Component@ConfigurationProperties(prefix="teacher")publicclassPerson{privateStringname;私人年龄;StringgetName(){返回名称;}voidsetName(Stringname){this.name=name;}intgetAge(){返回年龄;}voidsetAge(intage){this.age=age;}@OverridepublicStringtoString(){return"User{"+"name='"+name+'\''+",age="+age+'}';}}第5步:在Polaris控制台中添加配置文件1.创建NamespaceNamespace是Polaris中的核心概念,通过Namespace逻辑隔离资源,例如通常用来标识不同的环境,不同的集群2.创建配置文件分组Polaris的配置文件分组概念是一个setofconfigurationfilesCollection,建议使用应用名作为组名,比如我们的例子中,新建一个polaris-config-example组。polaris-config-example应用的配置文件放在polaris-config-example组下,方便配置管理。3.在PolarisConfigurationCenter控制台创建并发布配置文件。配置文件名可以通过/以树状目录结构显示,树状结构可以清晰的管理配置文件。比如一个应用被划分成不同的模块,每个模块都有一套独立的配置文件,那么可以创建module1/file1.properties、module1/file2.yaml、module2/file3.yaml。注意:配置文件名强烈建议带文件后缀,如.properties.yaml.yml.json等。因为客户端会通过文件名后缀来解析文件内容,如果客户端发现一个未知的后缀,则默认将其视为一个.properties文件。配置示例如下图所示:第六步:启动应用,访问SpringCloudTencentConfig到这里就完成了。第七步:实现动态刷新配置能力SpringCloud通过在配置发生变化时重建bean来实现动态刷新能力。刷新能力可以通过以下两步实现:第一步:开启动态刷新开关(默认开启),在bootstrap.yml中配置spring.cloud.polaris.config.auto-refresh=true第二步:标记带@RefreshScope的bean注意完整配置参数配置项Key默认值必填配置项说明spring.cloud.polaris.config.enabledtrue是否启用配置模块spring.cloud.polaris.config.addressNoNoPolaris服务器地址,你可以留空。spring.cloud.polaris.config.port只有当配置中心和注册中心地址不同时才需要填写.cloud.polaris.config.groups否是否从Polaris服务器获取自定义配置文件spring.cloud.polaris.config.connect-remote-servertrue否是否连接远程Polaris配置中心服务器,当没有网络环境或没有Polaris服务器时可以关闭Polaris服务器。介绍了北极星配置中心的原理。当客户端启动应用时,同步从服务端拉取配置,获取最新的配置内容,为第一步拉取的所有配置文件生成List版本>数据,并向服务器发送订阅配置请求。请求内容为ListVersion>。当收到配置文件的推送消息时,从服务器拉取最新的配置文件。订阅配置服务器端先查看客户端ListVersion>请求中是否存在滞后的File版本号。如果是这样,立即用File->NewVersion内容响应客户端。如果客户端配置文件版本号是最新的,则保存在内存中。维护File->List的数据结构,保持请求30s。如果30s内有配置文件发布,会立即响应请求,返回File->NewVersion给所有客户端发布和推送配置,简化流程。用户点击界面上的发布按钮,服务器更新数据库中的配置发布表中的数据。配置发布表的核心字段:file、version、content、mtime每个Polaris服务器实例都会每隔1s定期扫描配置发布表,根据mtime检索最近1s内发生变化的数据。Polaris服务器实例扫描最新变化的数据,然后重新加载内存缓存,并在内存中向消息发布管道写入消息推送协程,从消息发布管道中获取消息并消费消息。通过File->List信息,获取所有订阅配置文件的客户端信息,响应客户端Hold的请求。