> 文章列表 > 利用Spring-cloud-config-server 管理业务相关配置

利用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拿到业务配置,然后进行相应的处理返回给客户

二、知识点

  1. 读写锁的使用:ReentrantReadWriteLock
  2. 缓存的使用(两级缓存):ConcurrentHashMap,一级缓存的key是文件名+文件类型转换器value是LinkedTreeMap;二级缓存的key是文件名,value是String对象,里面放的是从config server拿过来的json串
  3. compute方法的使用
  4. 定时器的使用:@EnableScheduling 和 @Scheduled(initialDelaying = "${config.field:10000}",fixedDelayString = "${config.field:10000}", 里面的时间单位是毫秒
  5. InitialzingBean接口的使用
  6. Spring bean依赖的注解以及注入顺序
  7. BiFunction类的使用
  8. 工具的集成

三、实现逻辑梳理

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 的环境变量可以控制。

四、demo实现