SpringCloud的入门学习之概念理解、Config配置中心

1、SpringCloud Config分布式配置中心。分布式系统面临的配置问题。

  答:微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。SpringCloud提供了ConfigServer解决这个问题,我们每一个微服务自己带一个application.yml,上百个配置文件的管理。

2、SpringCloud Config分布式配置中心是什么?

  答:SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。SpringCloud Config为服务端和客户端两个部分。Config的服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并未客户端提供获取配置信息,加密或者解密信息等访问接口。Config客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息配置服务器默认采用git来存储配置信息,这样就有助于对环境进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容。

3、SpringCloud Config分布式配置中心能干吗?

  答:a、集中式管理配置文件,有Config Server进行统一管理。
    b、不同环境不同配置,动态化的配置更新,分环境部署比如dev/tst/prod/beta/release。
    c、运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息。
    d、当配置发生变动的时候,服务不要重启即可感知到配置的变化并应用到新的配置。
    e、将配置信息以REST接口的形式暴漏。

4、SpringCloud Config分布式配置中心与Github整合配置。

  答:由于SpringCloud Config默认使用Git来存储配置文件(也有其他方式,比如支持SVN和本地文件),但是推荐的还是Git,而且使用的是http或者https访问的形式。
SpringCloud的入门学习之概念理解、Config配置中心_第1张图片

5、SpringCloud Config服务端配置。用自己的GitHub账号在Github上新建一个名为microservicecloud-config的新Repository。获取到SSH协议的git地址。本地磁盘目录新建git仓库并clone。

SpringCloud的入门学习之概念理解、Config配置中心_第2张图片

下载的时候出现问题了,将本地密钥放到github的密钥管理里面。

1 $ git clone [email protected]:MRbie/microservicecloud-config.git
2 Cloning into 'microservicecloud-config'...
3 Warning: Permanently added the RSA host key for IP address '13.250.177.223' to the list of known hosts.
4 [email protected]: Permission denied (publickey).
5 fatal: Could not read from remote repository.
6 
7 Please make sure you have the correct access rights
8 and the repository exists.

C:\Users\Aiyufei\.ssh里面有id_rsa和id_rsa.pub两个文件,然后复制id_rsa.pub文件里面的内容。

SpringCloud的入门学习之概念理解、Config配置中心_第3张图片

SpringCloud的入门学习之概念理解、Config配置中心_第4张图片再次使用git clone命令进行下载,如下所示:

SpringCloud的入门学习之概念理解、Config配置中心_第5张图片

SpringCloud的入门学习之概念理解、Config配置中心_第6张图片

在新建的本地目录创建一个application.yml配置文件,将配置好的application.yml配置文件推送到github上面。

 1 # 切记保存为UTF-8类型.
 2 spring:
 3   profiles:
 4     active:
 5     - dev # 开发环境
 6 
 7 ---
 8 spring:
 9   profiles: dev # 开发环境
10   application:
11     name: microservicecloud-config-3344-dev 
12 
13 ---
14 spring:
15   profiles: test # 测试环境
16   application:
17     name: microservicecloud-config-3344-test 
18      

SpringCloud的入门学习之概念理解、Config配置中心_第7张图片

SpringCloud的入门学习之概念理解、Config配置中心_第8张图片

可以看到已经成功上传到了github仓库里面。

SpringCloud的入门学习之概念理解、Config配置中心_第9张图片

5、创建模块microservicecloud-config-3344,即为SpringCloud的配置中心模块。修改pom.xml配置文件,如下所示:

 1 "http://maven.apache.org/POM/4.0.0"
 2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
 4     http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     4.0.0
 6     
 7         com.bie.springcloud
 8         microservicecloud
 9         0.0.1-SNAPSHOT
10     
11     microservicecloud-config-3344
12 
13     
14         
15         
16             org.springframework.cloud
17             spring-cloud-config-server
18         
19         
20         
21             org.eclipse.jgit
22             org.eclipse.jgit
23             4.10.0.201712302008-r
24         
25         
26         
27             org.springframework.boot
28             spring-boot-starter-actuator
29         
30         
31         
32             org.springframework.cloud
33             spring-cloud-starter-hystrix
34         
35         
36             org.springframework.cloud
37             spring-cloud-starter-eureka
38         
39         
40             org.springframework.cloud
41             spring-cloud-starter-config
42         
43         
44             org.springframework.boot
45             spring-boot-starter-jetty
46         
47         
48             org.springframework.boot
49             spring-boot-starter-web
50         
51         
52             org.springframework.boot
53             spring-boot-starter-test
54         
55         
56         
57             org.springframework
58             springloaded
59         
60         
61             org.springframework.boot
62             spring-boot-devtools
63         
64     
65 
66 

修改模块microservicecloud-config-3344的配置文件application.yml。

 1 server: 
 2   port: 3344 
 3   
 4 spring:
 5   application:
 6     name:  microservicecloud-config
 7   cloud:
 8     config:
 9       server:
10         git:
11           uri: [email protected]:MRbie/microservicecloud-config.git  #GitHub上面的git仓库名字
12  
13     
14     

修改模块microservicecloud-config-3344的主启动类,如下所示:

 1 package com.bie;
 2 
 3 import org.springframework.boot.SpringApplication;
 4 import org.springframework.boot.autoconfigure.SpringBootApplication;
 5 import org.springframework.cloud.config.server.EnableConfigServer;
 6 
 7 /**
 8  * 
 9  *
10  * @author biehl
11  *
12  */
13 @SpringBootApplication
14 @EnableConfigServer // SpringCloud Config的服务器器端
15 public class MicroservicecloudConfigApplication {
16 
17     public static void main(String[] args) {
18         SpringApplication.run(MicroservicecloudConfigApplication.class, args);
19     }
20 }

测试通过Config微服务是否可以从Github上获取到配置内容,启动主启动类,如下所示:

注意:如果eclipse要和github调通,要进行如下操作:
SpringCloud的入门学习之概念理解、Config配置中心_第10张图片

SpringCloud的入门学习之概念理解、Config配置中心_第11张图片

成功实现了使用SpringCloud Config通过Github获取到配置信息了。

6、SpringCloud Config客户端配置与测试。创建配置文件microservicecloud-config-client.yml。

SpringCloud的入门学习之概念理解、Config配置中心_第12张图片

microservicecloud-config-client.yml配置内容如下所示:

 1 # 切记保存为UTF-8类型.
 2 spring:
 3   profiles:
 4     active:
 5     - dev # 开发环境
 6 
 7 ---
 8 server:
 9     port: 8201
10     
11 spring:
12   profiles: dev # 开发环境
13   application:
14     name: microservicecloud-config-client 
15 
16 eureka:
17   client:
18     service-url:
19       #设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址。
20       defaultZone: http://127.0.0.1:7001/eureka/        
21     
22 ---
23 server:
24     port: 8202
25     
26 spring:
27   profiles: test # 开发环境
28   application:
29     name: microservicecloud-config-client
30 
31 eureka:
32   client:
33     service-url:
34       #设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址。
35       defaultZone: http://127.0.0.1:7001/eureka/
36  
37 
38 
39 
40  

将microservicecloud-config-client.yml上传到github上面。

SpringCloud的入门学习之概念理解、Config配置中心_第13张图片

7、Spring Cloud Config客户端通过Config服务端获得Github上的配置。

新建microservicecloud-config-client-3355。microservicecloud-config-client-3355,这个Config Client客户端通过去访问microservicecloud-config-3344,Config Server服务端,拿到远程的git上面的信息(Remote Git Repository远程仓库),拿到外置的统一的分布式配置信息。修改pom.xml配置文件,如下所示:

 1 "http://maven.apache.org/POM/4.0.0"
 2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
 4     http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     4.0.0
 6     
 7         com.bie.springcloud
 8         microservicecloud
 9         0.0.1-SNAPSHOT
10     
11     microservicecloud-config-client-3355
12 
13     
14         
15         
16             org.springframework.cloud
17             spring-cloud-starter-config
18         
19         
20             org.springframework.boot
21             spring-boot-starter-actuator
22         
23         
24             org.springframework.cloud
25             spring-cloud-starter-hystrix
26         
27         
28             org.springframework.cloud
29             spring-cloud-starter-eureka
30         
31         
32             org.springframework.cloud
33             spring-cloud-starter-config
34         
35         
36             org.springframework.boot
37             spring-boot-starter-jetty
38         
39         
40             org.springframework.boot
41             spring-boot-starter-web
42         
43         
44             org.springframework.boot
45             spring-boot-starter-test
46         
47         
48         
49             org.springframework
50             springloaded
51         
52         
53             org.springframework.boot
54             spring-boot-devtools
55         
56     
57 
58 

bootstrap.yml系统级别的,优先级更高的配置文件。application.yml是用户级别的资源配置项。
SpringCloud会创建一个Bootstrap Context,作为Spring应用的Application Context的父上下文,初始化的时候,Bootstrap Context负责从外部资源加载配置熟悉并解析配置。这两个上下文共享一个从外部获取的Enviroment。Bootstrap属性有高优先级,默认情况下,它们不会被本地配置覆盖。Bootstrap Context和Application Context有着不同的约定,所以新增一个bootstrap.yml配置文件,保证Bootstrap Context和Application Context配置的分离。

bootstrap.yml配置文件,内容如下所示:

1 spring:
2   cloud:
3     config:
4       name: microservicecloud-config-client # 需要从github上读取的资源名称,注意没有yml后缀名
5       profile: test   # 本次访问的配置项
6       label: master   
7       uri: http://127.0.0.1:3344  # 本微服务启动后先去找3344号服务,通过SpringCloudConfig获取GitHub的服务地址
8  

application.yml配置文件,内容如下所示:

1 spring:
2   application:
3     name: microservicecloud-config-client # 本项目的应用名称

SpringCloud Config客户端配置与测试,启动Config配置中心microservicecloud-config-3344微服务并测试,http://127.0.0.1:3344/microservicecloud-config-client-dev.yml或者http://127.0.0.1:3344/application-dev.yml

microservicecloud-config-client-3355模块的bootstrap.yml的配置spring.cloud.config.profile=dev或者test决定了启动的端口号是多少的。可以在控制台进行观察。

启动microservicecloud-config-client-3355作为Client准备进行访问,bootstrap.yml里面的profile值是什么,决定从github上获取什么。
dev默认在github上对应的端口号是8201,访问路径是http://127.0.0.1:8201/config
test默认在github上对应的端口号是8202,访问路径是http://127.0.0.1:8202/config

8、SpringCloud Config配置实战,通过做一个eureka服务中心和一个Dept访问的微服务,将两个微服务的配置统一由github获得实现统一配置分布式管理,完成多环境的变更。创建microservicecloud-config-eureka-client-7001模块,microservicecloud-config-dept-client-8001模块,由于之前已经写过,这里只是通过github过去配置进行练习。
将这两个配置文件上传到github进行SpringCloud Config项目使用。microservicecloud-config-eureka-client.yml配置文件,内容如下所示:

 1 # 切记保存为UTF-8类型.
 2 spring:
 3   profiles:
 4     active:
 5     - dev # 开发环境
 6 
 7 ---
 8 server:
 9   port: 7001 #注册中心占用7001端口号,冒号后面必须要有空格。
10 
11 spring:
12   profiles: dev 
13   application: microservicecloud-config-eureka-client-7001
14 
15 
16 eureka:
17   instance: 
18     hostname: eureka7001.com #eureka服务端的实例名称,冒号后面必须要有空格。
19   client:
20     register-with-eureka: false # false表示不向注册中心注册自己
21     fetch-registry: false # false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
22     service-url:
23       #设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址。
24       # defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/        
25       defaultZone: http://127.0.0.1:7001/eureka/  
26 
27 ---
28 server:
29   port: 7001 #注册中心占用7001端口号,冒号后面必须要有空格。
30 
31 spring:
32   profiles: test 
33   application: microservicecloud-config-eureka-client-7001
34 
35 eureka:
36   instance: 
37     hostname: eureka7001.com #eureka服务端的实例名称
38   client:
39     register-with-eureka: false # false表示不向注册中心注册自己
40     fetch-registry: false # false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
41     service-url:
42       #设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址。
43       # defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/        
44       defaultZone: http://127.0.0.1:7001/eureka/   
45       
46     
47         

microservicecloud-config-dept-client.yml配置文件,内容如下所示:

 1 # 切记保存为UTF-8类型.
 2 spring:
 3   profiles:
 4     active:
 5     - dev # 开发环境
 6 
 7 ---
 8 server:
 9   port: 8001
10 
11 mybatis:
12   config-location: classpath:mybatis/mybatis.cfg.xml        # mybatis配置文件所在路径
13   type-aliases-package: com.bie.po                          # 所有实体类别名类所在包
14   mapper-locations:
15   - classpath:mybatis/mapper/**/*.xml                       # mapper映射文件  
16   
17 spring:
18   profiles: dev  
19   application:
20     name: microservicecloud-config-provider-dept-client     # 微服务的名称
21   datasource:
22     type: com.alibaba.druid.pool.DruidDataSource            # 当前数据源操作类型
23     driver-class-name: org.gjt.mm.mysql.Driver              # mysql驱动包
24     url: jdbc:mysql://localhost:3306/cloudDB01                # 数据库名称
25     username: root
26     password: 123456
27     dbcp2:
28       min-idle: 5                                           # 数据库连接池的最小维持连接数
29       initial-size: 5                                       # 初始化连接数
30       max-total: 5                                          # 最大连接数
31       max-wait-millis: 200                                  # 等待连接获取的最大超时时间
32 
33 eureka:
34   client: # 客户端注册进eureka服务列表内
35     service-url:
36       # defaultZone: http://localhost:7001/eureka
37       defaultZone: http://127.0.0.1:7001/eureka/
38   instance: 
39     instance-id: microservicecloud-provider-dept8001 # 将eureka-server注册中心的服务,显示你想看的名称
40     prefer-ip-address: true # 访问路径可以显示IP地址    
41 
42      
43              
44 info: # 微服务info内容显示详细信息
45   app.name: microservicecloud-provider-dept # 应用名称
46   company.name: www.baidu.com # 公司地址
47   build.artifactId: $project.artifactId$  # 构建项目artifactId
48   build.version: $project.version$ # 构建项目版本号
49       
50  
51 ---
52 server:
53   port: 8001
54 
55 mybatis:
56   config-location: classpath:mybatis/mybatis.cfg.xml        # mybatis配置文件所在路径
57   type-aliases-package: com.bie.po                          # 所有实体类别名类所在包
58   mapper-locations:
59   - classpath:mybatis/mapper/**/*.xml                       # mapper映射文件  
60   
61 spring:
62   profiles: test  
63   application:
64     name: microservicecloud-config-provider-dept-client     # 微服务的名称
65   datasource:
66     type: com.alibaba.druid.pool.DruidDataSource            # 当前数据源操作类型
67     driver-class-name: org.gjt.mm.mysql.Driver              # mysql驱动包
68     url: jdbc:mysql://localhost:3306/cloudDB02              # 数据库名称
69     username: root
70     password: 123456
71     dbcp2:
72       min-idle: 5                                           # 数据库连接池的最小维持连接数
73       initial-size: 5                                       # 初始化连接数
74       max-total: 5                                          # 最大连接数
75       max-wait-millis: 200                                  # 等待连接获取的最大超时时间
76 
77 eureka:
78   client: # 客户端注册进eureka服务列表内
79     service-url:
80       # defaultZone: http://localhost:7001/eureka
81       defaultZone: http://127.0.0.1:7001/eureka/
82   instance: 
83     instance-id: microservicecloud-provider-dept8001 # 将eureka-server注册中心的服务,显示你想看的名称
84     prefer-ip-address: true # 访问路径可以显示IP地址    
85 
86      
87              
88 info: # 微服务info内容显示详细信息
89   app.name: microservicecloud-provider-dept # 应用名称
90   company.name: www.baidu.com # 公司地址
91   build.artifactId: $project.artifactId$  # 构建项目artifactId
92   build.version: $project.version$ # 构建项目版本号
93 
94 
95  

microservicecloud-config-eureka-client.yml的pom.xml配置文件,内容如下所示:

 1 "http://maven.apache.org/POM/4.0.0"
 2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
 4     http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     4.0.0
 6     
 7         com.bie.springcloud
 8         microservicecloud
 9         0.0.1-SNAPSHOT
10     
11     microservicecloud-config-eureka-client-7001
12 
13     
14         
15         
16             org.springframework.cloud
17             spring-cloud-starter-config
18         
19         
20             org.springframework.cloud
21             spring-cloud-starter-eureka-server
22         
23         
24         
25             org.springframework
26             springloaded
27         
28         
29             org.springframework.boot
30             spring-boot-devtools
31         
32     
33 
34 

microservicecloud-config-eureka-client.yml的bootstrap.yml配置文件,内容如下所示:

1 spring: 
2   cloud: 
3     config: 
4       name: microservicecloud-config-eureka-client     # 需要从github上读取的资源名称,注意没有yml后缀名
5       profile: dev 
6       label: master 
7       uri: http://127.0.0.1:3344      # SpringCloudConfig获取的服务地址

microservicecloud-config-eureka-client.yml的application.yml配置文件,内容如下所示:

1 spring:
2   application:
3     name: microservicecloud-config-eureka-client

microservicecloud-config-eureka-client.yml的主启动类,内容如下所示:

 1 package com.bie;
 2 
 3 import org.springframework.boot.SpringApplication;
 4 import org.springframework.boot.autoconfigure.SpringBootApplication;
 5 import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
 6 
 7 /**
 8  * EurekaServer服务器端启动类,接受其它微服务注册进来
 9  * 
10  * @author biehl
11  */
12 @SpringBootApplication
13 @EnableEurekaServer
14 public class MicroservicecloudConfigEurekaApplication {
15 
16     public static void main(String[] args) {
17         SpringApplication.run(MicroservicecloudConfigEurekaApplication.class, args);
18     }
19 
20 }

microservicecloud-config-dept-client-8001的pom.xml配置文件,内容如下所示:

 1 "http://maven.apache.org/POM/4.0.0"
 2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
 4     http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     4.0.0
 6     
 7         com.bie.springcloud
 8         microservicecloud
 9         0.0.1-SNAPSHOT
10     
11     microservicecloud-config-dept-client-8001
12 
13     
14         
15         
16             org.springframework.cloud
17             spring-cloud-starter-config
18         
19         
20             org.springframework.boot
21             spring-boot-starter-actuator
22         
23         
24             org.springframework.cloud
25             spring-cloud-starter-eureka
26         
27         
28             com.bie.springcloud
29             microservicecloud-api
30             ${project.version}
31         
32         
33             junit
34             junit
35         
36         
37             mysql
38             mysql-connector-java
39         
40         
41             com.alibaba
42             druid
43         
44         
45             ch.qos.logback
46             logback-core
47         
48         
49             org.mybatis.spring.boot
50             mybatis-spring-boot-starter
51         
52         
53             org.springframework.boot
54             spring-boot-starter-jetty
55         
56         
57             org.springframework.boot
58             spring-boot-starter-web
59         
60         
61             org.springframework.boot
62             spring-boot-starter-test
63         
64         
65             org.springframework
66             springloaded
67         
68         
69             org.springframework.boot
70             spring-boot-devtools
71         
72     
73 
74 

microservicecloud-config-dept-client-8001的bootstrap.yml配置文件,内容如下所示:

1 spring:
2   cloud:
3     config:
4       name: microservicecloud-config-dept-client #需要从github上读取的资源名称,注意没有yml后缀名
5       #profile配置是什么就取什么配置dev or test
6       profile: dev
7       #profile: test
8       label: master
9       uri: http://127.0.0.1:3344  #SpringCloudConfig获取的服务地址

microservicecloud-config-dept-client-8001的application.yml配置文件,内容如下所示:

1 spring:
2   application:
3     name: microservicecloud-config-dept-client

其他的类和之前的一样,这里省略不写了。

SpringCloud的入门学习之概念理解、Config配置中心_第14张图片

测试如下所示,启动microservicecloud-config-3344模块、启动microservicecloud-config-eureka-client-7001注册中心、启动microservicecloud-config-dept-client-8001服务提供者。

 

 

作者:别先生

博客园:https://www.cnblogs.com/biehongli/

如果您想及时得到个人撰写文章以及著作的消息推送,可以扫描上方二维码,关注个人公众号哦。

 

你可能感兴趣的:(SpringCloud的入门学习之概念理解、Config配置中心)