1、Springcloud基本架构流程图
从图中我们可以看出所有服务的请求先经过zuul路由组件,zuul路由组件把这些请求统一分配处理之后,会经过config dashboard组件进行统一环境配置,那么我们今天就学习这个分布式配置中心。
2、Springcloud分布式配置中心
分布式系统面临的--配置文件的问题
微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中出现大量的服务,由于每个服务都需要必要的配置信息才能运行,所以一套集中式的,动态的配置管理设施是必不可少的。SpringCloud提供了ConfigServer来解决这个问题,我们每一个微服务自己带着一个application.yml,那上百个配置文件要修改起来,岂不是要发疯。
- 1、什么是SpringCloud config分布式配置中心
springcloud config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环节提供了一个中心化的外部配置。
例如:分布式配置中心分为客户端和服务端,三个服务为客户端,分布式配置中心为服务端,服务端通过本地或者git方式连接到远程仓库获取配置信息,客户端调用配置中心服务端获取配置,运行服务。
服务端: 称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息、加密、解密等访问接口,配置服务器可以在本地也可以在云端。
客户端:通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息,配置服务器默认用git来存储配置信息,这样就有利于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容
- 2、SpringCloud config分布式配置中心能干嘛?
- 集中管理配置文件
- 不同环境,不同配置,动态的配置更新,分环境部署。/dev /test /prod...
- 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向分布式配置中心拉取自己所需要的配置信息。
- 当配置发生变化时,服务不需要重新启动,即可感知配置的变化,又可使用新配置
- 将配置信息以REST接口的形式暴露
- 3、SpringCloud config分布式配置中心与github整合 SpringCloud Config默认使用Git来存储配置文件(也有其他方式,如SVN)最推荐的是Git、而且使用的是http/https访问的形式。
3、使用git克隆仓库项目、存储配置文件并提交到远程(码云)
-
第一步:下载git客户端工具: www.oschina.net/p/git
-
第二步:访问码云官网,进入注册页面进行注册 gitee.com/signup
- 第三步:登录码云,创建项目仓库,并复制仓库SSH项目地址
- 第四步:创建一个存放下载项目的本地文件夹
-
第五步:在创建的文件夹中右键选择
git bash*第六步:在git bash命令框中对自己的个人信息进行配置(码云官网中的git大全,有关于git环境的配置)1、使用
git config --list命令,显示当前的git配置git config --list 显示当前的git配置信息
git config user.name //查看自己配置的用户名
git config --global user.name "输入自己的用户名" //设置用户名和邮箱信息
git config --global user.email "输入自己的邮箱"
3、如果用户名和邮箱已经存在错误信息,则修改用户名和邮箱
git config --global --replace-all user.name "输入自己的用户名"
git config --global --replace-all user.email "输入自己的邮箱"
- 第六步:为自己电脑生成公钥(使用SSH公钥可以让你在你的电脑和码云通讯时使用安全链接)很重要的一步,否则不能克隆项目
进入码云个人主页 -> 设置 -> 选择SSH公钥 -> 用命令ssh-keygen -t rsa -C "自己的邮箱号"命令在git bash窗口生成公钥,此时公钥会在C盘 -> 用户 -> Administrator -> .ssh下会有两个文件(公钥和私钥) -> 将生成的id_rsa.pub公钥复制到码云的SSH公钥处,填写密码即可将公钥添加在自己电脑上。
输入生成公钥命令,出现此界面,说明成功。
- 第七步:配置完后,复制刚才创建仓库的SSH地址,输入
git clone 地址,期间会让你确认yes,即可完成克隆,在克隆成功的文件夹中,比真实远程仓库中多一个.get文件夹,本地项目的暂存区。
- 第八步:在本地项目文件夹下,创建
application.yml配置文件,用于提供远程服务器中的配置信息,多环境配置
spring:
profiles:
active: dev
# 配置多文档模档块
---
spring:
profiles: dev
application:
name: springcloud-config-dev
---
spring:
profiles: test
application:
name: springcloud-config-test
-
第九步:将application.yml提交到码云上(分五步走战略)
- 1、进入配置项目文件
cd springcloud-config/
cd springcloud-config/- 2、先将application.yml文件添加到暂存区
git add .
git add .- 3、查看提交状态
git status
git status- 4、提交到本地git仓库(-m 后面为提交的说明信息)
git commit -m "first commit"
git commit -m "first commit"- 5、推送到远程仓库(一定要保证联网状态哦!)
git push origin master
origin: 当前用户 master: 要push的分支名
git push origin master - 1、进入配置项目文件
4、config server 服务端连接git配置
- 第一步:创建springcloud-config-server-3344模块为分布式配置服务端
- 第二步:导入监控、web、spring-cloud-config-server等依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--actuator完善监控的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-config-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
</dependencies>
- 第三步:编写application.yml配置文件
配置服务端口、服务名、config配置中心连接远程仓库地址等信息
server:
port: 3344
spring:
application:
name: springcloud-config-server
cloud:
config:
server:
git:
uri: https://gitee.com/Lmobject/springcloud-config.git
# 通过config-server 可以连接到git,访问其中的配置和资源
- 第四步:创建启动类,开启服务配置中心连接远程仓库的注解
@EnableConfigServer
package com.baoji.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer //开启服务配置中心连接远程仓库的注解
public class config_server_3344 {
public static void main(String[] args) {
SpringApplication.run(config_server_3344.class,args);
}
}
- 第五步:测试服务端是否能够连接远程仓库获取配置信息
通过http://localhost:3344/application-dev.yml路径访问远程仓库
也可以使用http://localhost:3344/application/profer/master路径访问远程仓库
好了,我们的配置中心服务端就可以连接到远程仓库获取配置信息了
5、config client客户端连接服务端获取git远程上的配置信息
- 第一步:在本地项目中创建需要共享的配置文件
config-client.yml 将eureka配置、spring配置、多环境文档配置统一集中配置
#多环境文档配置
spring:
profiles:
active: dev
#开发环境
---
server:
port: 8201
#spring的配置
spring:
profiles: dev
application:
name: springcloud-provider-dept
#Eureka的配置 服务注册到哪里
#Eureka配置
eureka:
client:
service-url: # 监控页面,服务根据注册中心此地址进行注册
defaultZone: http://eureka7002.com:7002/eureka/
#测试环境
---
server:
port: 8202
#spring的配置
spring:
profiles: test
application:
name: springcloud-provider-dept
#Eureka的配置 服务注册到哪里
#Eureka配置
eureka:
client:
service-url: # 监控页面,服务根据注册中心此地址进行注册
defaultZone: http://eureka7002.com:7002/eureka/
-
第二步:使用git bash客户端将本地项目(包含统一配置文件)推送到码云上,方便服务端获取配置信息 (五步走战略)
1、 进入到项目目录下
cd D:\springcloud-Git cd springcloud-config/2、将文件添加到暂存区
git add .git add .3、查看提交状态信息
git statusgit status4、提交到本地
git commit -m "second commit"git commit -m "second commit"5、推送到远程
git push origin mastergit push origin master我们已经在码云上可以看到我们推送的配置文件信息了
- 第三步:创建springcloud-config-client-3355模块为分布式配置客户端服务
- 第四步:导入web依赖、监控依赖、分布式配置中心客户端依赖
注意:客户端依赖Id是spring-cloud-starter-config,服务端依赖Id是```spring-cloud-config-server
<dependencies>
<!--配置分布式配置中心客户端-->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-config -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--actuator完善监控的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
- 第五步:编写配置文件bootstrap.yml、application.yml
bootstrap.yml:系统级别的配置 根加载器 防止和远程上的配置冲突,优先级最高(配置的是springcloud-config访问的全路径)
# 系统级别的配置 根加载器 防止和远程上的配置冲突,优先级最高
spring:
cloud:
config: # 其实配置的就是访问服务端时的路径 http://localhost:3344/config-client/dev/master
profile: dev #获取配置上的哪个环境
name: config-client # 需要获取远程配置上的资源名称
label: master # 访问git上的哪个分支
uri: http://localhost:3344 #客户端访问服务端获取git上的配置 name: config-client
application.yml: 用户级别的配置 (随便配置个spring的名称就行)
# 用户级别的配置
spring:
application:
name: springcloud-config-client-3355
- 第六步:编写ConfigController,通过服务端拿到git远程仓库的配置信息(eureka注册信息,spring信息、多环境的端口号等信息)
package com.baoji.springcloud;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.Mapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ConfigController {
@Value("${spring.application.name}") //通过远程配置中的名称来获取指定的值
private String applicationName; //获取远程的服务名
@Value("${eureka.client.service-url.defaultZone}")
private String eurekaServer; //获取远程的eureka注册服务
@Value("${server.port}")
private String port; //获取远程配置多环境的端口号
@RequestMapping("/config")
public String getConfig(){
return "applicationName: "+applicationName+
"eurekaServer: "+eurekaServer+
"port: "+port;
}
}
- 第七步:编写启动类
package com.baoji.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ConfigClient_3355 {
public static void main(String[] args) {
SpringApplication.run(ConfigClient_3355.class,args);
}
}
第八步:测试
1、先通过服务器http://localhost:3344/config-client/dev/master路径访问远程仓库,查看服务器是否连接上仓库
因为我们客户端配置的是访问dev生产环境的配置信息,所以我们通过http://localhost:8201/config路径获取生产环境的配置信息
6、关于博客中整理的SpringCloud整体学习思维导图
好了,我们今天初步学习了Springcloud-config分布式配置中心的概念、原理、配置以及git克隆仓库项目、存储配置文件并提交到远程的详细解析,分布式配置中心客户端、服务端配置详解,相信这是一个不错的git推送到远程、springcloud config配置的入门详细教程,希望读者能够喜欢。
你的👍+关注是对作者最大的支持与鼓励,来吧,小红心💕走起来!