概述
学到现在模块很多了,配置非常麻烦。未来真正项目模块更多,所以需要一个配置中心进行配置。
还有生产环境,测试环境,发布版本等,都需要进行配置
所以需要一个集中的,动态的配置管理设施是非常重要的
Spring Cloud Config为微服务架构提供了集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供一个中心化的外部配置
分为服务端和客户端
服务端也被称为分布式配置中心,它是一个独立的微服务应用,用来连结配置服务器并为客户端提供配置信息,加解密信息等访问接口
客户端则通过指定配置中心管理应用资源,以及业务相关的配置内容,并在启动时从配置中心获取和加载配置信息配置服务器默认采用git来存储配置信息,这样有助于对环境配置进行版本管理,并且可以通过git(svn,本地文件)客户端工具来方便的管理和访问配置内容
Config服务端配置
在gittee上创建一个名为springcloud2020study-config的新仓库
Git地址:https://gitee.com/xsycy/springcloud2020studyconfig.git
Git仓库的操作:可以直接idea新建一个springcloud2020study-config进行操作,或者按照网页上新仓库如何创建的指示进行创建
包含三个文件:
config-dev.yml, config-prod.yml,config-test.yml,内容暂时可以随便输入
新建cloud-config-center-3344模块
Pom:
<dependencies>
<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>
<dependency>
<groupId>com.xs.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</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>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Yml:
server:
port: 3344
spring:
application:
name: cloud-config-center #注册进Eureka服务器的微服务名
cloud:
config:
server:
git:
uri: git@gitee.com:xsycy/springcloud2020studyconfig.git
#GitHub上面的git仓库名字
search-paths: #搜索目录
- springcloud2020studyconfig
label: master #读取分支
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
主启动类:
@SpringBootApplication
@EnableConfigServer//这里有改变了
public class ConfigCenterMain3344 {
public static void main(String[] args) {
SpringApplication.run(ConfigCenterMain3344.class,args);
}
}
找到c:Windowssystem32driversetc路径下的hosts文件,添加:
127.0.0.1 config-3344.com
实际上之前就添加过了
启动7001,再启动3344,输入:http://config-3344.com:3344/master/config-dev.yml
显示配置内容则算成功
配置读取规则:
/{label}/{application}-{profile}.yml
例子:http://config-3344.com:3344/master/config-dev.yml
Master分支下的内容
如果有其他分支,比如dev,则输入:
http://config-3344.com:3344/dev/config-dev.yml
/{application}-{profile}.yml
例子:http://config-3344.com:3344/config-dev.yml
因为在yml中已经配过分支了
/{application}-{profile}/{label}
http://config-3344.com:3344/config/dev
读出来的是json串
总结:
Label:分支
Name:服务名
Profiles:环境(dev/test/prod)
叫成config-xxx就是严格遵守规则命名的
服务端配置完成
接下来是客户端
新建cloud-config-client-3355模块
Pom
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>com.xs.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</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>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
接下来是新内容:bootstrap.yml
Application.yml是用户记的配置文件,而bootstrap.yml是系统级别的,优先度更高,更早加载
在这里,bootstrap.yml负责和3344沟通,Application.yml则负责各个模块
bootstrap.yml:
server:
port: 3355
spring:
application:
name: config-client
cloud:
config:
label: master #分支名称
name: config #配置文件名称
profile: dev #读取后缀名称 上述三个综合http://localhost:3344/master/config-dev.yml
uri: http://localhost:3344 #配置中心的地址
#服务注册到eureka地址
eureka:
client:
service-url:
#设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址
defaultZone: http://localhost:7001/eureka #单机版
主启动类:
@SpringBootApplication
@EnableEurekaClient
public class ConfigClientMain3355 {
public static void main(String[] args) {
SpringApplication.run(ConfigClientMain3355.class,args);
}
}
Controller:
@RestController
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/configInfo")
public String getConfigInfo(){
return configInfo;
}
}
输入:http://localhost:3355/configInfo
得到服务端的configInfo即成功
然后问题来了,分布式配置的动态更新如何实现
在远程git里的配置文件进行了修改,服务端会立刻跟着更新变化
http://localhost:3344/master/config-dev.yml 可以看到内容已修改
但是客服端并没有跟着刷新,重启3355才更新,但这并不是动态更新
修改3355模块,引入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
修改yml,暴露监控断点
# 暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"
Controller上加注解:@RefreshScope
再次修改远程配置内容,会发现服务端生效,但客户端依然没有生效
解决方法:发送post请求刷新3355
命令台里:C:Users78762>curl -X POST "http://localhost:3355/actuator/refresh"
输出:["config.client.version","config.info"],即可,不再需要重启3355
但是当有很多微服务呢?3355,3366,3377……这样手动刷新也是问题,可否广播,一次通知,处处生效?
以上为74到77集的内容
最后
以上就是调皮荔枝为你收集整理的尚硅谷SpringCloud2020简单学习记录(个人用)74-77集的全部内容,希望文章能够帮你解决尚硅谷SpringCloud2020简单学习记录(个人用)74-77集所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复