SpringCloud微服务之分布式配置中心-config的使用
前言
springcloud技术栈:
一、分布式配置中心
分布式配置中心是一种分布式系统中用于统一管理配置信息的工具。它可以将分散在不同节点上的应用程序配置信息集中存储,提供统一的配置管理工具和接口,以便应用程序可以方便地获取和更新配置信息。通过Config分布式配置中心,可以实现配置信息的集中管理与实时更新,从而大大提高了系统的灵活性、可维护性和可扩展性。常见的Config分布式配置中心包括Spring Cloud Config、Apollo等。
Spring Cloud Config是Spring Cloud提供的分布式配置中心解决方案。使用Spring Cloud Config可以将分散在不同节点上的应用程序配置信息集中管理,通过Git、SVN、本地文件系统等方式存储配置信息,提供一致的REST API接口供应用程序获取配置信息,并支持配置信息的实时更新。
官方中文文档地址链接: https://www.springcloud.cc/spring-cloud-config.html
二、服务端配置config
1.git建立一个仓库
在github上创建一个仓库,里面存放统一的全局配置文件。
2.pom
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
3.yml
uri是上述创建的仓库地址
lable是分支
spring:
application:
name: cloud-config
cloud:
config:
server:
git:
uri: https://gitee.com/zy/sprincloud-config.git #GitHub上面的git仓库名字
search-paths: #搜索目录
- springcloud-config
label: master #读取分支
4.启动类@EnableConfigServer
@SpringBootApplication
@EnableEurekaClient
@EnableConfigServer
public class configMain {
public static void main(String[] args) {
SpringApplication.run(configMain.class, args);
}
}
三、客户端配置config
1.pom
注意,和服务端的不一样。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2.yml
此时创建的yml文件是bootstrap.yml,上述服务端的是application.yml。
如果存储库是基于文件的,则服务器将从application.yml创建Environment(在所有客户端之间共享),。如果YAML文件在其中具有指向Spring配置文件的文档,则应用较高优先级(按照列出的配置文件的顺序),并且如果存在特定于配置文件的YAML(或属性)文件,那么这些文件也应用的优先级高于默认值。因为bootstrap的优先级高于application,所以使用bootstrap。
spring:
application:
name: config-client
cloud:
config:
label: master #分支名称
name: config #配置文件名称
profile: dev #读取后缀名称 上述三个结合组装:http://localhost:3344/master/config-dev.yml
uri: http://localhost:3344 #配置中心的地址
3.启动类
@SpringBootApplication
@EnableEurekaClient
public class configclient3366Main {
public static void main(String[] args) {
SpringApplication.run(configclient3366Main.class, args);
}
}
4.controller
@RestController
public class configclientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/getConfigInfo")
public String getConfigInfo() {
return configInfo;
}
}
四、测试
1.启动注册中心和服务端、客户端
访问:localhost: 客户端port/getConfigInfo,客户端根据 uri: http://localhost:3344访问服务端,服务端根据config配置会自动访问到配置的git仓库的配置文件。
2.修改仓库配置文件,再次调用
这时会发现调用并未获取到最新修改后的配置文件。重启服务,再次调用即可访问。怎么做到不重启服务呢?
在客户端的controller上配置@RefreshScope注解,在客户端使用curl命令就可以实现动态刷新,则不需要重启服务。
curl -X POST "http://localhost:3355/actuator/bus-refresh"
那么会引入一个新的问题?如果有上百个客户端呢,都要执行一遍命令吗?所以就引入了总线(Springcloud bus)概念,一次广播,处处生效。
具体可以关注此专栏,下篇将会介绍bus,地址:https://blog.csdn.net/qq_35306069/article/details/130380544?spm=1001.2014.3001.5501
总结
通过以上步骤,就可以使用Spring Cloud Config完成分布式系统中的配置管理。同时,Spring Cloud Config还支持高可用、安全认证、加密解密等功能,可以根据具体场景进行配置。