目录
1、为什么选择Spring Cloud Config
1.1 集中式管理
1.2 动态修改配置
2、Spring Cloud Config 简介
3、服务端配置
3.1 添加依赖
3.2 开启服务注册
3.3 添加YML配置
3.4 创建远程分支及Profile配置文件
3.5 启动并测试服务
4、客户端配置
4.1 添加依赖
4.2 开启服务注册
4.3 添加YML配置
4.4 启动并测试服务
5、原因分析
5.1 定位问题原因
5.2 定位问题2分析过程
5.3 定位问题1分析过程
5.3.1 逆向排查
5.3.2 正向跟踪
1、为什么选择Spring Cloud Config
如何将配置信息直接写在本地yml配置文件存在哪些痛点呢?
如果多个微服务可能使用相同的配置信息,假设有50个微服务,如果配置需要修改配置文件,就意味着我们需要修改50个微服务的yml文件,极其浪费时间。配置信息修改后,必须重启服务才能生效。
相比较同类产品,SpringCloudConfig最大的优势是和Spring无缝集成,支持Spring里面Environment和PropertySource的接口,对于已有的Spring应用程序的迁移成本非常低,在配置获取的接口上是完全一致,结合SpringBoot可使你的项目有更加统一的标准(包括依赖版本和约束规范),避免了应为集成不同开软件源造成的依赖版本冲突。
而Spring Cloud Config解决了这两个痛点:
1.1 集中式管理
在开发中多个微服务可能使用相同的配置,假设有50个微服务,如果配置需要修改配置文件,就意味着我们需要修改50个微服务的yml文件。使用配置中心后,就可以做到一处修改,处处修改。
1.2 动态修改配置
使用配置中心,配合actuator可以实现配置的动态修改,无需重启服务
2、Spring Cloud Config 简介
SpringCloudConfig就是我们通常意义上的配置中心,把应用原本放在本地文件的配置抽取出来放在中心服务器,从而能够提供更好的管理、发布能力。SpringCloudConfig分服务端和客户端,服务端负责将git svn中存储的配置文件发布成REST接口,客户端可以从服务端REST接口获取配置。但客户端并不能主动感知到配置的变化,从而主动去获取新的配置,这需要每个客户端通过POST方法触发各自的/refresh。
SpringCloudBus通过一个轻量级消息代理连接分布式系统的节点。这可以用于广播状态更改(如配置更改)或其他管理指令。SpringCloudBus提供了通过POST方法访问的endpoint/bus/refresh,这个接口通常由git的钩子功能调用,用以通知各个SpringCloudConfig的客户端去服务端更新配置。
注意:这是工作的流程图,实际的部署中SpringCloudBus并不是一个独立存在的服务,这里单列出来是为了能清晰的显示出工作流程。
下图是SpringCloudConfig结合SpringCloudBus实现分布式配置的工作流:
简单说明一下流程:
1)把配置文件放在Git Repository中。
2)Config Server从Git repository中读取配置信息。
3)其他客户端再从Config Server中加载配置文件
3、服务端配置
紧接上一篇内容代码示例,创建一个新的module. 命名为:springcloud-config-server。
3.1 添加依赖
在springcloud-config-server pom.xml中添加config-server依赖。如下,
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
3.2 开启服务注册
新建启动类SpringCloudConfigServerApp,并添加@EnableConfigServer,表示开启 SpringCloudConfig配置。
代码示例如下,
package com.xintu.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
/**
* @author XinTu
* @classname SpringCloudConfigServerApp
* @description TODO
* @date 2023年03月23日 14:02
*/
@SpringBootApplication
@EnableConfigServer
public class SpringCloudConfigServerApp {
public static void main(String[] args) {
SpringApplication.run(SpringCloudConfigServerApp.class, args);
}
}
3.3 添加YML配置
新增配置文件 application.yml。配置文件添加内容如下,
# 服务端口
server:
port: 8086
#指定应用名称
spring:
application:
name: config-server
cloud:
config:
label: master #配置git仓库分支
server:
git:
uri: https://gitee.com/lwbook/spring-cloud-config.git #配置git仓库地址
search-paths: spring-cloud-config #配置仓库路径
#username: git_username #访问git仓库的用户名,公开仓库不配置用户名
#password: git_password #访问git仓库的用户密码,公开仓库不配置密码
3.4 创建远程分支及Profile配置文件
1) 远程配置仓库及文件根据自己公司环境自行创建。
这里老王提供一个自己创建的公共Git地址。https://gitee.com/lwbook/spring-cloud-config.git。
该仓库下新建了一个xintu-config文件夹。
在xintu-config 文件夹下分别创建3个文件。
注意:文件命名规格:{项目名}-{配置环境版本}.yml。比如application-dev.yml,表示的是application项目的开发环境配置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)