文章插图
当然,如果想把配置信息存储到数据库,只要新增一个存储到数据的实现就行 。
3、ConfigControllerConfigController提供了对于配置文件的crud的http接口
文章插图
ConfigController是通过调用ConfigManager来完成配置文件的crud
4、ConfigManager
文章插图
其实就是一个service层,就是简单的参数封装,最终是调用ConfigFileStorage存储层的实现来完成配置的存储功能 。
这样配置中心的配的存取的功能就实现了 。
所以,服务端还是比较简单的 。其实就是跟平时写的业务系统的crud没什么区别,就是将数据库存储替换成了磁盘文件的存储 。
至于前面说的配置文件变更通知的功能,我是基于客户端来实现的 。
三、客户端的实现客户端工程代码如下
文章插图
1、ConfigFileChangedListener
文章插图
2、ConfigService
文章插图
封装了客户端的核心功能,可以添加对某个文件的监听器和获取某个文件的配置内容 。
使用示例:
// 创建一个ConfigService,传入配置中心服务端的地址ConfigService configService = new ConfigService("localhost:8888");// 从服务端获取配置文件的内容,文件的id是新增配置文件时候自动生成ConfigFile config = configService.getConfig("69af6110-31e4-4cb4-8c03-8687cf012b77");// 对某个配置文件进行监听configService.addListener("69af6110-31e4-4cb4-8c03-8687cf012b77", new ConfigFileChangedListener() { @Override public void onFileChanged(ConfigFile configFile) { System.out.printf("fileId=%s配置文件有变动,最新内容为:%s%n", configFile.getFileId(), configFile.getContent()); }});
这里说一下配置变更通知的实现原理 。首先对于客户端来说,要想知道哪个配置文件进行了改动,有两种方式
第一种是通过push的方式来实现 。当配置文件发生变动的时候,服务端主动将变动的配置文件push给客户端 。这种方式实现起来比较麻烦,一方面是服务端还得存储客户端的服务的信息,因为服务端得知道push到哪台服务器上;另一方面,客户端需要提供一个接口来接收服务端push的请求,所以这种方式整体实现起来比较麻烦 。但是这种push方式时实性比较好,一旦配置文件有变动,第一时间客户端就能够知道配置有变动 。
第二种方式就是基于pull模式来实现 。客户端定时主动去服务端拉取配置文件,判断文件内容是否有变动,一旦有变动就进行监听器的回调 。这种实现相比push来说简单不少,因为服务端不需要关心客户端的信息,所有的操作都由客户端来完成 。但是这个定时的时间间隔不好控制,太长可能会导致时实性差,太短会导致可能无效请求过多,因为配置压根可能没有变化 。
但是这里我选择了第二种方式,因为实现起来简单 。。
经验总结扩展阅读
- 闲鱼小法庭9票是不是赢了 闲鱼小法庭结束后在哪里查看记录
- 亚洲第一个举办奥运会的国家是?
- 蛋挞液除了做蛋挞还可以做什么
- 家里停水了能开空调吗
- 素士w3冲牙器坏了怎么拆开修理_素士w3冲牙器的拆解
- 为什么红薯粉煮了20分钟还硬
- 五行缺水最吉利的名字女孩 五行缺木缺水最吉利的女孩名字
- 美容美甲店名字大全 时尚ins美甲店名字大全
- 冻香肠煮20分钟熟了吗
- 思绪摇摆还是对你冷不起来对你充满了期待是什么歌