鱼C论坛

 找回密码
 立即注册
查看: 1608|回复: 0

[技术交流] SpringCloud之分布式配置中心(六)

[复制链接]
发表于 2018-9-5 16:04:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
简介
SpringCloudConfig就是我们通常意义上的配置中心,把应用原本放在本地文件的配置抽取出来放在中心服务器,从而能够提供更好的管理、发布能力。SpringCloudConfig分服务端和客户端,服务端负责将git(svn)中存储的配置文件发布成REST接口,客户端可以从服务端REST接口获取配置。但客户端并不能主动感知到配置的变化,从而主动去获取新的配置,这需要每个客户端通过POST方法触发各自的/refresh。

SpringCloudBus通过一个轻量级消息代理连接分布式系统的节点。这可以用于广播状态更改(如配置更改)或其他管理指令。SpringCloudBus提供了通过POST方法访问的endpoint/bus/refresh,这个接口通常由git的钩子功能调用,用以通知各个SpringCloudConfig的客户端去服务端更新配置。在spring cloud config 组件中,分两个角色,一是config server,二是config client。

构建Config Server
创建一个spring-boot项目,取名为config-server,其pom.xml:

  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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4.     <modelVersion>4.0.0</modelVersion>

  5.     <groupId>cn.easted</groupId>
  6.     <artifactId>com</artifactId>
  7.     <version>0.0.1-SNAPSHOT</version>
  8.     <packaging>jar</packaging>

  9.     <name>com</name>
  10.     <description>Demo project for Spring Boot</description>

  11.     <parent>
  12.         <groupId>org.springframework.boot</groupId>
  13.         <artifactId>spring-boot-starter-parent</artifactId>
  14.         <version>1.5.6.RELEASE</version>
  15.         <relativePath/> <!-- lookup parent from repository -->
  16.     </parent>

  17.     <properties>
  18.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  19.         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  20.         <java.version>1.8</java.version>
  21.         <spring-cloud.version>Dalston.SR3</spring-cloud.version>
  22.     </properties>

  23.     <dependencies>
  24.         <dependency>
  25.             <groupId>org.springframework.cloud</groupId>
  26.             <artifactId>spring-cloud-config-server</artifactId>
  27.         </dependency>

  28.         <dependency>
  29.             <groupId>org.springframework.boot</groupId>
  30.             <artifactId>spring-boot-starter-test</artifactId>
  31.             <scope>test</scope>
  32.         </dependency>

  33.         <dependency>
  34.             <groupId>org.springframework.cloud</groupId>
  35.             <artifactId>spring-cloud-starter-eureka</artifactId>
  36.         </dependency>
  37.     </dependencies>

  38.     <dependencyManagement>
  39.         <dependencies>
  40.             <dependency>
  41.                 <groupId>org.springframework.cloud</groupId>
  42.                 <artifactId>spring-cloud-dependencies</artifactId>
  43.                 <version>${spring-cloud.version}</version>
  44.                 <type>pom</type>
  45.                 <scope>import</scope>
  46.             </dependency>
  47.         </dependencies>
  48.     </dependencyManagement>

  49.     <build>
  50.         <plugins>
  51.             <plugin>
  52.                 <groupId>org.springframework.boot</groupId>
  53.                 <artifactId>spring-boot-maven-plugin</artifactId>
  54.             </plugin>
  55.         </plugins>
  56.     </build>
  57.      <repositories>
  58.         <repository>
  59.             <id>spring-milestones</id>
  60.             <name>Spring Milestones</name>
  61.             <url>https://repo.spring.io/milestone</url>
  62.             <snapshots>
  63.                 <enabled>false</enabled>
  64.             </snapshots>
  65.         </repository>
  66.     </repositories>
  67. </project>
  68. 在程序的入口Application类加上@EnableConfigServer注解开启配置服务器的功能,代码如下:

  69. @SpringBootApplication
  70. @EnableConfigServer
  71. public class ConfigServerApplication {

  72.     public static void main(String[] args) {
  73.         SpringApplication.run(ConfigServerApplication.class, args);
  74.     }
  75. }
复制代码

需要在程序的配置文件application.yml文件配置以下:

  1. spring.application.name=config-server
  2. server.port=8888

  3. spring.cloud.config.server.git.uri=https://github.com/forezp/SpringcloudConfig/
  4. spring.cloud.config.server.git.searchPaths=respo
  5. spring.cloud.config.label=master
  6. spring.cloud.config.server.git.username=
  7. spring.cloud.config.server.git.password=
复制代码

spring.cloud.config.server.git.uri:配置git仓库地址

spring.cloud.config.server.git.searchPaths:配置仓库路径

spring.cloud.config.label:配置仓库的分支

spring.cloud.config.server.git.username:访问git仓库的用户名

spring.cloud.config.server.git.password:访问git仓库的用户密码

远程仓库https://github.com/shaweiwei/myspringcloudconfig/ 中有个文件config-client-dev.properties文件中有一个属性:

fooo=version
启动程序:访问http://localhost:8888/fooo/dev

http请求地址和资源文件映射如下:

/{application}/{profile}[/{label}]

/{application}-{profile}.yml

/{label}/{application}-{profile}.yml

/{application}-{profile}.properties

/{label}/{application}-{profile}.properties

构建一个config client
重新创建一个springboot项目,取名为config-client,其pom文件:

  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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4.     <modelVersion>4.0.0</modelVersion>

  5.     <groupId>com.forezp</groupId>
  6.     <artifactId>config-client</artifactId>
  7.     <version>0.0.1-SNAPSHOT</version>
  8.     <packaging>jar</packaging>

  9.     <name>config-client</name>
  10.     <description>Demo project for Spring Boot</description>

  11.     <parent>
  12.         <groupId>com.forezp</groupId>
  13.         <artifactId>sc-f-chapter6</artifactId>
  14.         <version>0.0.1-SNAPSHOT</version>
  15.     </parent>

  16.     <dependencies>
  17.         <dependency>
  18.             <groupId>org.springframework.boot</groupId>
  19.             <artifactId>spring-boot-starter-web</artifactId>
  20.         </dependency>
  21.         <dependency>
  22.             <groupId>org.springframework.cloud</groupId>
  23.             <artifactId>spring-cloud-starter-config</artifactId>
  24.         </dependency>
  25.     </dependencies>

  26.     <build>
  27.         <plugins>
  28.             <plugin>
  29.                 <groupId>org.springframework.boot</groupId>
  30.                 <artifactId>spring-boot-maven-plugin</artifactId>
  31.             </plugin>
  32.         </plugins>
  33.     </build>


  34. </project>
复制代码

其配置文件bootstrap.properties:

  1. spring.application.name=config-client
  2. spring.cloud.config.label=master
  3. spring.cloud.config.profile=dev
  4. spring.cloud.config.uri= http://localhost:8888/
  5. server.port=8881
复制代码

spring.cloud.config.label 指明远程仓库的分支

spring.cloud.config.profile

dev开发环境配置文件

test测试环境

pro正式环境

spring.cloud.config.uri= http://localhost:8888/ 指明配置服务中心的网址。

程序的入口类,写一个API接口“/hi”,返回从配置中心读取的foo变量的值,代码如下:

  1. @SpringBootApplication
  2. @RestController
  3. public class ConfigClientApplication {

  4.     public static void main(String[] args) {
  5.         SpringApplication.run(ConfigClientApplication.class, args);
  6.     }

  7.     @Value("${foo}")
  8.     String foo;
  9.     @RequestMapping(value = "/hi")
  10.     public String hi(){
  11.         return foo;
  12.     }
  13. }
复制代码

打开网址访问:http://localhost:8881/hi,网页显示: version 欢迎大家一起学习研究相关技术愿意了解源码的朋友直接求求交流分享技术:2147775633

这就说明,config-client从config-server获取了foo的属性,而config-server是从git仓库读取的。如图:
六.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 09:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表