大家好,我是三友~~
最近突然心血来潮(就是闲的)就想着撸一个简单的配置中心,顺便也照葫芦画瓢给整合到SpringCloud 。
本文大纲
文章插图
配置中心的概述随着历史的车轮不断的前进,技术不断的进步,单体架构的系统都逐渐转向微服务架构 。虽然微服务架构有诸多优点,但是随着越来越多的服务实例的数量 , 配置的不断增多,传统的配置文件方式不能再继续适用业务的发展,所以急需一种可以统一管理配置文件应用 , 在此之下配置中心就诞生了 。
所以配置中心就是用来统一管理各种服务配置的一个组件,本质上就是一个web应用 。
配置中心的核心功能一个配置中心的核心功能其实主要包括两个:
- 配置的存取
- 配置变更的通知
配置变化的通知也是一个很重要的功能,一旦配置中心的配置有变动的话,那么使用到这个配置的客户端就需要知道这个配置有变动,从而可以做到相应的变动的操作 。
手撸一个简易的配置中心上文分析了一个配置中心的核心功能,接下来就实现这两个核心的功能 。
一、文件工程整体分析
文章插图
文件工程整体分为客户端与服务端
- 服务端:单独部署的一个web应用,端口是8888 , 提供了对于配置增删改查的http接口
- 客户端(SDK):业务系统需要引用对应的依赖,封装了跟服务端交互的代码
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: 上一次文件更新的时间戳 。当文件存储或者更新的时候,需要更新时间戳 , 这个字段是用来判断文件是否有改动
public interface ConfigFileStorage { void save(ConfigFile configFile); void update(ConfigFile configFile); void delete(String fileId); ConfigFile selectByFileId(String fileId); List<ConfigFile> selectAll();}
这个接口提供了对于配置存储的crud操作,目前我已经实现了基于内存和磁盘文件的存储的代码文章插图
可以在项目启动的时候,在配置文件指定是基于磁盘文件存储还是基于内存存储,默认是基于磁盘文件存储 。
文章插图
当然,如果想把配置信息存储到数据库,只要新增一个存储到数据的实现就行 。
3、ConfigControllerConfigController提供了对于配置文件的crud的http接口
文章插图
ConfigController是通过调用ConfigManager来完成配置文件的crud
4、ConfigManager
文章插图
其实就是一个service层,就是简单的参数封装,最终是调用ConfigFileStorage存储层的实现来完成配置的存储功能 。
这样配置中心的配的存取的功能就实现了 。
所以 , 服务端还是比较简单的 。其实就是跟平时写的业务系统的crud没什么区别,就是将数据库存储替换成了磁盘文件的存储 。
推荐阅读
- 素士w3冲牙器坏了怎么拆开修理_素士w3冲牙器的拆解
- 小米11系列出现重大翻车_小米11系列是不是真的翻车了
- 【C++】从零开始的CS:GO逆向分析3——写出一个透视
- 去土耳其别再买洛神诗rosense玫瑰水了 很多国人都只知道土耳其粉色瓶的rosense玫瑰水好用
- 为了幻化求出处最好附带图片证实下 土著缠腰哪里出
- 社保每个月都在交,社保卡该如何使用(老家有一张社保卡外省交了社保)
- airpods丢了怎么定位查找_airpods丢了怎么查找位置
- python基础--简单数据类型预览
- 苹果ios15是不是更费电了_苹果ios15耗电快吗
- StampedLock:一个并发编程中非常重要的票据锁