博客参考学习视频: https://www.bilibili.com/video/BV18E411x7eT?from=search&seid=4388336378730572330
上一篇:SpringCloud 服务网关:https://blog.csdn.net/qq_45738810/article/details/109147121
微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对小,因此系统中出现大量的服务,由于每个服务都需要配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。
SpringCloud提供了ConfigServer来解决这个问题,我们每一个微服务自己的带着一个application.yml, 上百个配置文件的管理…o(╥﹏╥)o
是什么 SpringCloud Config 为微服务架构中微服务提供了集中化的外部配置支持,配置服务器为各个不同微服务应用的的所有环境提供了一个中心化的外部配置。
如何使用
Spring Cloud 分为服务端和客户端两部分
服务端也称为分布式配置中心,它是一个独立的微服务应用, 用来连接配置服务器并为客户端提供获取配置信息,加密/ 解密信息等访问接口。
客户端则是通过制定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取好加载配置信息配置服务器默认采用 git 来存储配置信息,这样就有助于缓解配置惊醒版本管理,并且可以通过 git 客户端工具来方便管理和访问配置内容。
https://cloud.spring.io/spring-cloud-static/spring-cloud-config/2.2.1.RELEASE/reference/html/
表示多个环境的配置文件,保存格式必须为 UTF-8,如果需要修改, 此处模拟运维人员操作 git 和 g 。
git addgit commit -m "init yml"git push origin masterPOM
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>clould</artifactId> <groupId>com.oy</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>cloud-config-center-3344</artifactId> <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.oy</groupId> <artifactId>cloud-api-commons</artifactId> <version>1.0-SNAPSHOT</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.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </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> </project>YML
server: port: 3344 spring: application: name: cloud-config-center #注册进Eureka服务器的微服务名 cloud: config: server: git: uri: https://github.com/OY6090/sprincloud-config.git #GitHub上面的git仓库名字 ####搜索目录 search-paths: - springcloud-config ####读取分支 label: main #服务注册到eureka地址 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); } }Windows 下修改 hosts 文件, 增加映射
路径:C:\WINDOWS\System32\drivers\etc
测试通过 Config 微服务是否可以从 Github 上获取配置内容
启动微服务 3344http://config-3344.com:3344/main/config-dev.ymlmain(maste) 分支
http://config-3344.com:3344/main/config-dev.ymlhttp://config-3344.com:3344/main/config-test.ymlhttp://config-3344.com:3344/main/config-prod.ymldev 分支
http://config-3344.com:3344/dev/config-dev.ymlhttp://config-3344.com:3344/dev/config-test.ymlhttp://config-3344.com:3344/dev/config-prod.yml /{application}-{profile}.yml http://config-3344.com:3344/config-dev.ymlhttp://config-3344.com:3344/config-test.ymlhttp://config-3344.com:3344/config-prod.ymlhttp://config-3344.com:3344/config-xxxx.yml(不存在的配置) /{application}-{profile}[/{label}] http://config-3344.com:3344/config/dev/mainhttp://config-3344.com:3344/config/test/mainhttp://config-3344.com:3344/config/prod/main 重要配置细节总结/{name}-{profiles}.yml
/{label}-{name}-{profiles}.yml
label:分支(branch)
name:服务名
profiles:环境(dev/test/prod)
成功实现了用 SpringCloud Config 通过 GitHub 获取配置信息
说明:
刷新 3355, 发现 ConfigServer 客户端没有任何响应
3355 没有变化除非自己重启或者重新加载
难道每次运维修改配置文件, 客户端都需要重启? ? 噩梦
修改 3355 模块, POM文件引入 actuator 监控
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>修改YML, 暴露监控端口
server: port: 3355 spring: application: name: config-client cloud: #Config客户端配置 config: label: main #分支名称 name: config #配置文件名称 profile: dev #读取后缀名称 上述3个综合:master分支上config-dev.yml的配置文件被读取http://config-3344.com:3344/master/config-dev.yml uri: http://localhost:3344 #配置中心地址k #服务注册到eureka地址 eureka: client: service-url: defaultZone: http://localhost:7001/eureka management: endpoints: web: exposure: include: "*"@RefreshScope 业务类 Controller 修改
@RestController @RefreshScope public class ConfigClientController { @Value("${config.info}") private String configInfo; @GetMapping("/configInfo") public String getConfigInfo() { return configInfo; } }此时修改 github—> 3344 —> 3355
http://localhost:3355/configInfo 3355 改变了没有? ? ? 没有改变, (┬_┬)需要运维人员发送 Post 请求刷新 3355必 须 是 Post 请 求 : curl -X POST “http://localhost:3355/actuator/refresh” 再次: http://localhost:3355/configInfo ,成功实现了客户端 3355 刷新到最新配置内容,避免了服务的重启 假如有多个微服务客户端 3355/3366/3377。。。。每个微服务都要执行一次 post 请求, 手动刷新?可否广播, 一次通知, 处处生效?我们想大范围的自动刷新, 求方法-----------结合消息总线 Bus 解决以上问题 。
具体请参考下篇博客:SpringCloud Bus 消息总线:https://blog.csdn.net/qq_45738810/article/details/109190898