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访问的形式。
5、SpringCloud Config服务端配置。用自己的GitHub账号在Github上新建一个名为microservicecloud-config的新Repository。获取到SSH协议的git地址。本地磁盘目录新建git仓库并clone。
下载的时候出现问题了,将本地密钥放到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文件里面的内容。
在新建的本地目录创建一个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
可以看到已经成功上传到了github仓库里面。
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 67 11com.bie.springcloud 8microservicecloud 90.0.1-SNAPSHOT 10microservicecloud-config-3344 12 1314 15 65 6616 19 20org.springframework.cloud 17spring-cloud-config-server 1821 25 26org.eclipse.jgit 22org.eclipse.jgit 234.10.0.201712302008-r 2427 30 31org.springframework.boot 28spring-boot-starter-actuator 2932 35org.springframework.cloud 33spring-cloud-starter-hystrix 3436 39org.springframework.cloud 37spring-cloud-starter-eureka 3840 43org.springframework.cloud 41spring-cloud-starter-config 4244 47org.springframework.boot 45spring-boot-starter-jetty 4648 51org.springframework.boot 49spring-boot-starter-web 5052 55 56org.springframework.boot 53spring-boot-starter-test 5457 60org.springframework 58springloaded 5961 64org.springframework.boot 62spring-boot-devtools 63
修改模块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通过Github获取到配置信息了。
6、SpringCloud Config客户端配置与测试。创建配置文件microservicecloud-config-client.yml。
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上面。
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 67 11com.bie.springcloud 8microservicecloud 90.0.1-SNAPSHOT 10microservicecloud-config-client-3355 12 1314 15 57 5816 19org.springframework.cloud 17spring-cloud-starter-config 1820 23org.springframework.boot 21spring-boot-starter-actuator 2224 27org.springframework.cloud 25spring-cloud-starter-hystrix 2628 31org.springframework.cloud 29spring-cloud-starter-eureka 3032 35org.springframework.cloud 33spring-cloud-starter-config 3436 39org.springframework.boot 37spring-boot-starter-jetty 3840 43org.springframework.boot 41spring-boot-starter-web 4244 47 48org.springframework.boot 45spring-boot-starter-test 4649 52org.springframework 50springloaded 5153 56org.springframework.boot 54spring-boot-devtools 55
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 67 11com.bie.springcloud 8microservicecloud 90.0.1-SNAPSHOT 10microservicecloud-config-eureka-client-7001 12 1314 15 33 3416 19org.springframework.cloud 17spring-cloud-starter-config 1820 23 24org.springframework.cloud 21spring-cloud-starter-eureka-server 2225 28org.springframework 26springloaded 2729 32org.springframework.boot 30spring-boot-devtools 31
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 67 11com.bie.springcloud 8microservicecloud 90.0.1-SNAPSHOT 10microservicecloud-config-dept-client-8001 12 1314 15 73 7416 19org.springframework.cloud 17spring-cloud-starter-config 1820 23org.springframework.boot 21spring-boot-starter-actuator 2224 27org.springframework.cloud 25spring-cloud-starter-eureka 2628 32com.bie.springcloud 29microservicecloud-api 30${project.version} 3133 36junit 34junit 3537 40mysql 38mysql-connector-java 3941 44com.alibaba 42druid 4345 48ch.qos.logback 46logback-core 4749 52org.mybatis.spring.boot 50mybatis-spring-boot-starter 5153 56org.springframework.boot 54spring-boot-starter-jetty 5557 60org.springframework.boot 58spring-boot-starter-web 5961 64org.springframework.boot 62spring-boot-starter-test 6365 68org.springframework 66springloaded 6769 72org.springframework.boot 70spring-boot-devtools 71
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
其他的类和之前的一样,这里省略不写了。
测试如下所示,启动microservicecloud-config-3344模块、启动microservicecloud-config-eureka-client-7001注册中心、启动microservicecloud-config-dept-client-8001服务提供者。
作者:别先生
博客园:https://www.cnblogs.com/biehongli/
如果您想及时得到个人撰写文章以及著作的消息推送,可以扫描上方二维码,关注个人公众号哦。