撸了一个简易的配置中心,顺带整合到了SpringCloud

大家好,我是三友~~
最近突然心血来潮(就是闲的)就想着撸一个简单的配置中心,顺便也照葫芦画瓢给整合到SpringCloud 。
本文大纲

撸了一个简易的配置中心,顺带整合到了SpringCloud

文章插图
配置中心的概述随着历史的车轮不断的前进,技术不断的进步,单体架构的系统都逐渐转向微服务架构 。虽然微服务架构有诸多优点,但是随着越来越多的服务实例的数量 , 配置的不断增多,传统的配置文件方式不能再继续适用业务的发展,所以急需一种可以统一管理配置文件应用 , 在此之下配置中心就诞生了 。
所以配置中心就是用来统一管理各种服务配置的一个组件,本质上就是一个web应用 。
配置中心的核心功能一个配置中心的核心功能其实主要包括两个:
  • 配置的存取
  • 配置变更的通知
配置的存取是配置中心不可缺失的功能,配置中心需要能够将配置进行保存,存在磁盘文件也好 , 又或是数据库也罢,总之需要持久化,同时配置中心也得提供配置查询的功能 。
配置变化的通知也是一个很重要的功能,一旦配置中心的配置有变动的话,那么使用到这个配置的客户端就需要知道这个配置有变动,从而可以做到相应的变动的操作 。
手撸一个简易的配置中心上文分析了一个配置中心的核心功能,接下来就实现这两个核心的功能 。
一、文件工程整体分析
撸了一个简易的配置中心,顺带整合到了SpringCloud

文章插图
文件工程整体分为客户端与服务端
  • 服务端:单独部署的一个web应用,端口是8888 , 提供了对于配置增删改查的http接口
  • 客户端(SDK):业务系统需要引用对应的依赖,封装了跟服务端交互的代码
二、服务端实现详解1、配置文件的数据存储模型ConfigFile在配置中心存储配置的时候,需要指明以下信息
public class ConfigFile {    private String fileId;    private String name;    private String extension;    private String content;    private Long lastUpdateTimestamp;}
  • fileId: 文件的唯一id,由配置中心服务端在新增配置文件存储的时候自动生成 , 全局唯一
  • name: 就是文件的名字,没有什么要求 , 见名知意就行
  • extension: 文件后缀名,指的是该配置是什么类型的文件,比如是properties、yml等
  • content: 就是配置文件的内容,不同的后缀名有不同的格式要求
  • lastUpdateTimestamp: 上一次文件更新的时间戳 。当文件存储或者更新的时候,需要更新时间戳 , 这个字段是用来判断文件是否有改动
2、文件存储层ConfigFileStorage对于文件存储层,我提供了一个ConfigFileStorage接口 , 
public interface ConfigFileStorage {    void save(ConfigFile configFile);    void update(ConfigFile configFile);    void delete(String fileId);    ConfigFile selectByFileId(String fileId);    List<ConfigFile> selectAll();}这个接口提供了对于配置存储的crud操作,目前我已经实现了基于内存和磁盘文件的存储的代码

撸了一个简易的配置中心,顺带整合到了SpringCloud

文章插图
可以在项目启动的时候,在配置文件指定是基于磁盘文件存储还是基于内存存储,默认是基于磁盘文件存储 。

撸了一个简易的配置中心,顺带整合到了SpringCloud

文章插图
当然,如果想把配置信息存储到数据库,只要新增一个存储到数据的实现就行 。
3、ConfigControllerConfigController提供了对于配置文件的crud的http接口

撸了一个简易的配置中心,顺带整合到了SpringCloud

文章插图
ConfigController是通过调用ConfigManager来完成配置文件的crud
4、ConfigManager
撸了一个简易的配置中心,顺带整合到了SpringCloud

文章插图
其实就是一个service层,就是简单的参数封装,最终是调用ConfigFileStorage存储层的实现来完成配置的存储功能 。
这样配置中心的配的存取的功能就实现了 。
所以 , 服务端还是比较简单的 。其实就是跟平时写的业务系统的crud没什么区别,就是将数据库存储替换成了磁盘文件的存储 。

推荐阅读