标签:label desc ica ring center def integer rop 调用
分布式系统中,由于服务数量非常多,配置文件分散在不同微服务项目中,管理极其不方便。为了方便配置文件集中管理,需要分布式配置中心组件。在Spring Cloud中,提供了Spring Cloud Config,它支持配置文件放在配置服务的本地,也支持配置文件放在远程仓库Git(GitHub、码云)。配置中心本质上是一个微服务,同样需要注册到Eureka服务中心!
一句话概括:统一管理所有微服务配置文件的一个微服务
配置中心,也是一个微服务,需要注册到注册中心
【配置中心的架构图】
配置中心获取码云配置文件
GitHub主服务在外网,访问经常不稳定,如果希望服务稳定,可以使用码云;
码云访问地址:
application为应用名称
profile用于区分开发环境dev,测试环境test,生产环境pro等
开发环境 user-dev.yml
测试环境 user-test.yml
2. 将user-service工程里的配置文件application.yml内容复制作为user-dev.yml文件内容
3. 创建完user-dev.yml配置文件之后,gitee中的仓库如下:
实现步骤:
创建配置中心SpringBoot项目config-server
勾选Starter:配置中心,Eureka客户端
在启动引导类上加@EnableConfigServer注解
修改配置文件:端口,应用名称,注册中心地址,码云仓库地址
启动测试,测试配置文件实时同步
实现过程:
1. 创建配置中心SpringBoot项目config-server
2. pom.xml 配置文件
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.9.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.zyu</groupId> <artifactId>config-service</artifactId> <version>0.0.1-SNAPSHOT</version> <name>config-service</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <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>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <!--SpringCloud所有依赖管理的坐标--> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.SR3</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
3. 启动类:创建配置中心工程config_server的启动类ConfigServerApplication
@SpringBootApplication @EnableDiscoveryClient//开启Eureka客户端发现功能 @EnableConfigServer //开启配置服务支持 public class ConfigServerApplication { public static void main(String[] args) { SpringApplication.run(ConfigServerApplication.class,args); } }
4. 配置文件:创建配置中心工程config_server的配置文件application.yml
server:
port: 12000
spring:
# 应用名称
application:
name: config-server
cloud:
config:
server:
git:
uri: https://gitee.com/zyulike/zyu-spring-cloud-config.git
# 注册中心地址
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
5. 启动测试:启动eureka注册中心和配置中心;
关于application.yml和bootstrap.yml文件的说明:
- bootstrap.yml文件是SpringBoot的默认配置文件,而且其加载时间相比于application.yml更早。
- bootstrap.yml和application.yml都是默认配置文件,但定位不同
- bootstrap.yml相当于项目启动的引导文件
- application.yml文件是微服务的常规配置参数,变化比较频繁
- 搭配spring-cloud-config使application.yml的配置可以动态替换。
目标:改造user-service工程,配置文件不再由微服务项目提供,而是从配置中心获取。
实现步骤:
在user_service服务中,添加Config的starter依赖
删除application.yml配置文件,新增bootstrap.yml配置文件
配置bootstrap.yml配置文件:
配置中心相关配置(配置文件前缀、后缀,仓库分支,是否开启配置中心)
注册中心地址
启动服务,测试效果
实现过程:
1. 添加依赖
<!--spring cloud 配置中心--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency>
2. 修改配置
# 注册中心地址
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
# 配置中心相关配置
# 使用配置中心
spring:
cloud:
config:
discovery:
enabled: true
service-id: config-server # 配置中心服务id
name: user # 与远程仓库中的配置文件的application和profile保持一致,{application}-{profile}.yml
profile: dev
label: master # 远程仓库中的分支保持一致
复现问题步骤:
1. 修改远程Git配置
2. 修改UserController
@RestController @RequestMapping("/user") public class UserController { @Value("${server.port}") private String port; @Value("${test.name}") private String name; @Autowired UserService userService; //根据id查询 @RequestMapping("/findById") public User findById(Integer id) { System.out.println("服务【"+port+"】被调用"); User user = userService.findById(id); user.setNote("服务【"+port+"】被调用"); user.setName(name); return user; } }
依次启动Eureka,配置中心,用户微服务;
结论:通过浏览器输出结果发现,我们对于Git仓库中的配置文件的修改,并没有及时更新到user-service微服务,只有重启用户微服务才能生效。
==SpringCloud Bus,解决上述问题,实现配置自动更新。==
标签:label desc ica ring center def integer rop 调用
原文地址:https://www.cnblogs.com/zyulike/p/13915271.html