SpringCloud全家桶:SpringCloud01 – 初识
SpringCloud全家桶:SpringCloud02 – 服务注册 Eureka Zookeeper Consul Nacos
SpringCloud全家桶:SpringCloud03 – 服务调用 Ribbon OpenFeign
SpringCloud全家桶:SpringCloud04 – 服务降级熔断 Hystrix Sentinel
SpringCloud全家桶:SpringCloud05 – 服务网关 Gateway
SpringCloud全家桶:SpringCloud06 – 服务配置 Config Nacos
SpringCloud全家桶:SpringCloud07 – 消息总线 Bus
SpringCloud全家桶:SpringCloud08 – 消息驱动 Stream
SpringCloud全家桶:SpringCloud09 – 分布式请求链路追踪 Sleuth
SpringCloud全家桶:SpringCloud10 – Alibaba Nacos
SpringCloud全家桶:SpringCloud11 – Alibaba Sentinel
SpringCloud全家桶:SpringCloud12 – Alibaba 分布式事务 Seata
服务配置
分布式系统当前面临的配置问题
微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务
都需要必要的配置信息
才能运行,所以—套集中式的、动态
的配置管理设施是必不可少的。
SpringCloud提供了ConfigServer来解决这个问题,我们每一个微服务自己带着一个application.yml,上百个配置文件的管理.…
Config
简介
是什么
SpringCloud Config为微服务架构中的微服务提供集中化
的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化
的外部配置
。
怎么玩
SpringCloud Config分为服务端
和客户端
两部分。
服务端也称为分布式配置中心
,它是一个独立的微服务
应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访问接口
客户端则是通过指定的配置中心
来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心
获取和加载配置信息
配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容
能干嘛
- 集中管理配置文件
- 不同环境不同配置,动态化的配置更新,分环境部署比如dev/test/prod/beta/release
- 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息
- 当配置发生变动时,服务不需要重启即可感知到配置的变化并应用新的配置
- post、curl访问刷新均可… 将配置信息以REST接口的形式暴露
一般与Github 或者Gitee一起用
使用
搭建git仓库
本地硬盘上新建仓库并克隆
git clone
新建cloud-config-center3344
pom
<dependencies>
<!--config server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</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>
<!--eureka client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</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>
yml
server:
port: 3344
spring:
application:
# 注册到eureka服务器的微服务名
name: cloud-config-center
cloud:
config:
server:
git:
uri: https://gitee.com/liang_jie_jsu/springcloud-config.git
### 搜索目录
search-paths:
- springcloud-config
### 读取分支
label: master
# 服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka # 集群版
启动类
@SpringBootApplication
@EnableConfigServer
public class ConfigMain3344 {
public static void main(String[] args) {
SpringApplication.run(ConfigMain3344.class);
}
}
修改windows的hosts文件
访问:http://config3344.com:3344/master/config-dev.yml
配置读取细节
推荐方式:
/{label}/{application}-{profile}.yml
- label:分支(branch)
- name:服务名
- profiles:环境(dev/test/prod)
新建cloud-config-client3355
pom
<dependencies>
<dependency>
<groupId>com.jsu.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<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>
<!--eureka client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</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>
Bootstrap.yml
- applicaiton.yml是用户级的资源配置项
- bootstrap.yml是系统级的,优先级更加高
Bootstrap属性有高优先级,默认情况下,它们不会被本地配置覆盖。Bootstrap context和Application Context有着不同的约定,所以新增了一个’bootstrap.yml’文件,保证Bootstrap Context和Application Context配置的分离。
要将Client模块下的application.yml文件改为bootstrap.yml,这是很关键的,
因为bootstrap.yml是比application.yml先加载的。bootstrap.yml优先级高于application.yml
bootstap.yml
server:
port: 3355
spring:
application:
####注册中心应用名称
name: config-client
cloud:
config:
# 综合起来就是: master分支下config-dev.yml被读取http://config3344.com:3344/master/config-dev.yml
label: master
name: config
####读取后缀
profile: dev
uri: http://localhost:3344
##### eureka服务注册地址
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka # 集群版
启动类
@SpringBootApplication
public class ConfigClientMain3355 {
public static void main(String[] args) {
SpringApplication.run(ConfigClientMain3355.class);
}
}
controller
@RestController
public class ConfigClientController {
@Value("${config}")
private String configInfo;
@RequestMapping(value = "/configInfo",method = RequestMethod.GET)
public String getConfigInfo(){
return configInfo;
}
}
测试
http://localhost:3355/configInfo
动态刷新
问题:linux运维修改git仓库的内容 刷新3344立刻响应 3355没有响应
当重启3355时候,发现响应。但是启动服务的方法不现实。于是配置动态刷新
修改3355项目
pom
<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>
yml
# 暴露监控端口
management:
endpoints:
web:
exposure:
include: "*"
controller上加 @RefreshScope
再次修改git仓库,发现3355还未响应
注意:使用post请求 刷新3355就可以了
Nacos
SpringCloudAlibaba – Nacos:https://blog.csdn.net/qq_42432141/article/details/110438580