您现在的位置是:首页 >学无止境 >利用Spring-cloud-config-server 管理业务相关配置网站首页学无止境
利用Spring-cloud-config-server 管理业务相关配置
趁工作不忙的时候研究了下嗯的Config server的技术,学习一下里面的思路
一、API 介绍
1. config server service: 这个服务里面放的是业务中需要的业务配置,比如银行信息json文件(银行的code,display code,name),产品的类型文件(产品名,产品分类)等,利用了Spring-cloud-config-server 依赖
2. global utilities API service:业务API, 会通过远程访问config server service拿到业务配置,然后进行相应的处理返回给客户
二、知识点
- 读写锁的使用:ReentrantReadWriteLock
- 缓存的使用(两级缓存):ConcurrentHashMap,一级缓存的key是文件名+文件类型转换器value是LinkedTreeMap;二级缓存的key是文件名,value是String对象,里面放的是从config server拿过来的json串
- compute方法的使用
- 定时器的使用:@EnableScheduling 和 @Scheduled(initialDelaying = "${config.field:10000}",fixedDelayString = "${config.field:10000}", 里面的时间单位是毫秒
- InitialzingBean接口的使用
- Spring bean依赖的注解以及注入顺序
- BiFunction类的使用
- 工具的集成
三、实现逻辑梳理
1.需求背景:业务配置文件是静态文件,而且基本上不频繁做修改,所以有了缓存设计,之前有疑问为什么不用redis,因为redis处理动态数据厉害,而且redis还需要单独维护,所以这里不适合用
处理:在去一级缓存拿数据时,如果拿不到则会去二级缓存拿,如果二级缓存仍然拿不到,则会去访问config serverAPI 拿静态文件内容。静态文件都多种类型,json, yml, properties文件,有多种文件转换器
2. 需求背景:因为有多个业务API会调用config Server拿业务配置信息。业务API 如果重启缓存数据则会清空,重新访问静态文件。一旦config server里面的静态文件发生变化, 调用它的多个业务API 需要及时得到更新。最笨的办法是一旦config server 改完重新部署,对应的业务API 也要重新部署以拿到最新的配置。
处理:加一个定时任务,在设置的时间内重新刷新,拿本地的config server API version和当前时间拿到的远程version作比较,如果远程version大于本地version则更新二级缓存。定时器时间的设置通过业务API 的环境变量可以控制。