当前位置:   article > 正文

Config-Server

configserver

Config-Server简介


    Spring Cloud配置中心,就是将每个服务的配置都集合在一个地方。这个地方要么是github,要么是国内gitee码云。通过config-server,可以在一个地方集中对所有环境(服务)进行外部化配置管理。例如,当一个服务从开发环境到测试环境,然后再从测试环境切换到生产环境,你可以统一使用config-server来统一管理这些环境之间的配置,并确保该环境在迁移时能够拥有它运行需要的一切配置。简而言之:config-server就是用来实现配置统一管理和不同环境间配置的切换

config-server分发图


 Config-server最小案例


   开发流程:1、创建config服务

  2、配置依赖,更换开发环境2.2.5.RELEASE,版本管理,consul注册中心,健康检查,config-server配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.2.5.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.demo</groupId>
  12. <artifactId>config</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>config</name>
  15. <description>Demo project for Spring Boot</description>
  16. <properties>
  17. <java.version>1.8</java.version>
  18. <spring-cloud.version>Hoxton.SR6</spring-cloud.version>
  19. </properties>
  20. <dependencyManagement>
  21. <dependencies>
  22. <dependency>
  23. <groupId>org.springframework.cloud</groupId>
  24. <artifactId>spring-cloud-dependencies</artifactId>
  25. <version>${spring-cloud.version}</version>
  26. <type>pom</type>
  27. <scope>import</scope>
  28. </dependency>
  29. </dependencies>
  30. </dependencyManagement>
  31. <dependencies>
  32. <dependency>
  33. <groupId>org.springframework.boot</groupId>
  34. <artifactId>spring-boot-starter-web</artifactId>
  35. </dependency>
  36. <dependency>
  37. <groupId>org.springframework.boot</groupId>
  38. <artifactId>spring-boot-starter-test</artifactId>
  39. <scope>test</scope>
  40. </dependency>
  41. <!--consul注册中心的依赖 因为eureka2.0已经停止更新 所以就没有去用他-->
  42. <dependency>
  43. <groupId>org.springframework.cloud</groupId>
  44. <artifactId>spring-cloud-starter-consul-discovery</artifactId>
  45. </dependency>
  46. <!--这个包是用来健康监控的-->
  47. <dependency>
  48. <groupId>org.springframework.boot</groupId>
  49. <artifactId>spring-boot-starter-actuator</artifactId>
  50. </dependency>
  51. <!--config server 配置中心 配置-->
  52. <dependency>
  53. <groupId>org.springframework.cloud</groupId>
  54. <artifactId>spring-cloud-config-server</artifactId>
  55. </dependency>
  56. </dependencies>
  57. <build>
  58. <plugins>
  59. <plugin>
  60. <groupId>org.springframework.boot</groupId>
  61. <artifactId>spring-boot-maven-plugin</artifactId>
  62. </plugin>
  63. </plugins>
  64. </build>
  65. </project>

  3、配置远程仓库、我这里采用的是国内gitee,注册账号,创建仓库

  4、新仓库配置,确认提交

  5、新建配置文件

  6、增加内容,确认提交就好

  7、复制这个地址,到我们项目的properties中配置

  8、properties配置

  1. #指定端口后
  2. server.port=7878
  3. #config在注册中心的地址
  4. spring.application.name=configserver
  5. #注册中心地址
  6. spring.cloud.consul.host=localhost
  7. #注册中心端口
  8. spring.cloud.consul.port=8500
  9. #gitee远程仓库地址
  10. spring.cloud.config.server.git.uri=https://gitee.com/G_wen/cloud-server-config.git
  11. #私有仓库的话就需要账号和密码
  12. #spring.cloud.config.server.git.username=
  13. #spring.cloud.config.server.git.password=

  9、启动类添加注解

  1. @SpringBootApplication
  2. @EnableDiscoveryClient //客户端发现的注解 害怕注册中心看不到这个服务
  3. @EnableConfigServer //configserver 注解 表示这个是一个config服务
  4. public class ConfigApplication {
  5. public static void main(String[] args) {
  6. SpringApplication.run(ConfigApplication.class, args);
  7. }
  8. }

  10、启动看效果,这里访问的路径是:http://localhost:7878/product-dev.properties,原本文件时product.properties,但是springcloud官方文档要求我们这样访问

  可以有三种访问格式,propeties结尾的

  yml结尾的

  json结尾的

  11、名字没有指定环境,他就是默认的dev环境,如果我们创建了dev的环境配置,那么显示的内容会优先加载一般配置,dev的会追加在后面

  再次访问,将dev的直接追加在后面

分支管理


   1、配置的分支管理。如果我们再加一个分支,例如dev的话,我们项目单独去访问这个分支,不去走master分支

  2、修改一下product-dev.properties中的内容,一会访问的时候以便区分,再properties中去增加配置

spring.cloud.config.server.git.default-label=dev

  3、访问效果

本地仓库管理


  1、config-server每次都是从gitee上拉取内容到本地仓库,本地仓库读取相应的配置文件,我们如果没有指定本地仓库路径,系统会自动为我们指定,下面是控制台为我们输出的默认仓库

2021-01-31 16:30:30.832  INFO 16020 --- [nio-7878-exec-2] o.s.c.c.s.e.NativeEnvironmentRepository  : Adding property source: file:/C:/Users/Geek/AppData/Local/Temp/config-repo-6875966835209491844/product.properties

  2、自己指定仓库路径,在properties配置文件中,加上配置,并创建相应的文件

  1. #指定从gitee上下载下来的资源存放的目录
  2. spring.cloud.config.server.git.basedir=F:\\practiceProject\\demo\\config7878\\src\\main\\resources\\localconfig

   3、运行以后

 ConfigClient客户端


    配置中心客户端,客户端的配置properties不再从本地加载,而是同时configserver,得到远程仓库配置的properties配置,再启动项目。现在搭建一个实例,将configclient注册到consul注册中心,configclient注册到注册中心,properties配置就需要配置注册中心地址,但是这个时候我把这个地址放在gitee上,如果client服务能成功注册到consul,说明client成功加载了配置。

  开发步骤:1、创建client微服务

  2、引入依赖,和一般的客户端一样,consul注册、健康检查、openfeign、hytrix降级熔断、新增config依赖

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.2.5.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.demo</groupId>
  12. <artifactId>configclient</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>configclient</name>
  15. <description>Demo project for Spring Boot</description>
  16. <properties>
  17. <java.version>1.8</java.version>
  18. <spring-cloud.version>Hoxton.SR6</spring-cloud.version>
  19. </properties>
  20. <dependencyManagement>
  21. <dependencies>
  22. <dependency>
  23. <groupId>org.springframework.cloud</groupId>
  24. <artifactId>spring-cloud-dependencies</artifactId>
  25. <version>${spring-cloud.version}</version>
  26. <type>pom</type>
  27. <scope>import</scope>
  28. </dependency>
  29. </dependencies>
  30. </dependencyManagement>
  31. <dependencies>
  32. <dependency>
  33. <groupId>org.springframework.boot</groupId>
  34. <artifactId>spring-boot-starter-web</artifactId>
  35. </dependency>
  36. <dependency>
  37. <groupId>org.springframework.boot</groupId>
  38. <artifactId>spring-boot-starter-test</artifactId>
  39. <scope>test</scope>
  40. </dependency>
  41. <!--consul注册中心的依赖 因为eureka2.0已经停止更新 所以就没有去用他-->
  42. <dependency>
  43. <groupId>org.springframework.cloud</groupId>
  44. <artifactId>spring-cloud-starter-consul-discovery</artifactId>
  45. </dependency>
  46. <!--这个包是用来健康监控的-->
  47. <dependency>
  48. <groupId>org.springframework.boot</groupId>
  49. <artifactId>spring-boot-starter-actuator</artifactId>
  50. </dependency>
  51. <!--引入openfeign依赖-->
  52. <dependency>
  53. <groupId>org.springframework.cloud</groupId>
  54. <artifactId>spring-cloud-starter-openfeign</artifactId>
  55. </dependency>
  56. <!--服务熔断 降级-->
  57. <dependency>
  58. <groupId>org.springframework.cloud</groupId>
  59. <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
  60. </dependency>
  61. <!--加入configclient的依赖-->
  62. <dependency>
  63. <groupId>org.springframework.cloud</groupId>
  64. <artifactId>spring-cloud-starter-config</artifactId>
  65. </dependency>
  66. </dependencies>
  67. <build>
  68. <plugins>
  69. <plugin>
  70. <groupId>org.springframework.boot</groupId>
  71. <artifactId>spring-boot-maven-plugin</artifactId>
  72. </plugin>
  73. </plugins>
  74. </build>
  75. </project>

  3、properties配置,保留了服务注册名,其他个性化的私有配置

  1. #将公共配置放在gitee上
  2. #设置端口号
  3. #server.port=9098
  4. #设置应用名称
  5. spring.application.name=configclient
  6. #设置注册中心的网址
  7. #spring.cloud.consul.host=localhost
  8. #设置访问注册中心的port
  9. #spring.cloud.consul.port=8500
  10. #私有配置
  11. #让微服务开启向配置中心拉取配置的功能
  12. spring.cloud.config.discovery.enabled=true
  13. #找到配置中心 service-id
  14. spring.cloud.config.discovery.service-id=configserver
  15. #从仓库的哪一个分支拉去配置 注意这个是分支
  16. spring.cloud.config.label=dev
  17. #拉取仓库中的文件 指定名称
  18. spring.cloud.config.name=client
  19. #指定配置文件环境 注意这个是环境
  20. spring.cloud.config.profile=dev

  4、在gitee上创建配置,创建三个环境的配置

  5、启动类配置一下注解

  1. @SpringBootApplication
  2. @EnableDiscoveryClient //其实配不配无所谓 但还是配置一下
  3. public class ConfigclientApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(ConfigclientApplication.class, args);
  6. }
  7. }

  6、有一点需要注意,properties的名字需要改成bootstrap.properties,不然会出现连接超时的情况,详情参考博客:https://blog.csdn.net/qq_44349459/article/details/113481856

   7、启动确保没有问题,启动时注册到consul,端口从gitee上获取成功

  8、查看consul注册中心,注册成功

 Configclient手动刷新配置


   服务客户端每次启动都会从远程仓库重新加载配置,如果我们自己开发需要在gitee上更改配置,那么重新启动服务便可以了。但是已经上线的项目,不可能随时开关,我们的项目肯定是随时开着的。那么我们在更改giee配置的时候,就需要主动的更新配置到我们正在运行的客户端服务。手动刷新就是主动发送更新请求到client客户端。

开发流程:1、在properties中增加配置

  1. #开启所有web端点暴露 这个就是为了手动刷新的时候能够得到请求
  2. management.endpoints.web.exposure.inclue=*

  2、这时候还需要配置一个请求接收的接口类,访问这里就可以看到更改的相应信息

  1. package com.demo.configclient.controller;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. import org.springframework.beans.factory.annotation.Value;
  5. import org.springframework.cloud.context.config.annotation.RefreshScope;
  6. import org.springframework.web.bind.annotation.GetMapping;
  7. import org.springframework.web.bind.annotation.RestController;
  8. @RestController
  9. @RefreshScope //刷新当前区域
  10. public class RefreshController {
  11. private Logger logger = LoggerFactory.getLogger(RestController.class);
  12. @Value("${server.port}")
  13. private int port; //拿到配置的端口
  14. @Value("${name}")
  15. private String name; //拿到配置的名字
  16. //用来做测试的 表示这里刷新能够访问最新的配置
  17. @GetMapping("/configtest")
  18. public String test() {
  19. logger.info("name---->{},port---->{}", name, port);
  20. return name + ":" + port;
  21. }
  22. }

  3、记得启动一下项目,让这些配置生效。访问接口,查看一下原本的值是啥。

  4、将gitee的配置改一下,然后用postman发送一下请求,超这个地址访问:http://localhost:9098/actuator/refresh。postman下载地址:

5、访问了以后,再取看一下

总结


  本章介绍了config-server是个怎样的组件。配置的中转站,configserver连接远程仓库gitee,访问gitee分支,指定本地配置仓库。configclient客户端配置如何从configserver拉取,如何在不重启configclient的情况下,更改了gitee配置,手动的将configclient配置给更改。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/84065
推荐阅读
相关标签
  

闽ICP备14008679号