ShardingSphere的配置中心
本篇文章源码基于4.0.1版本
使用配置中心来管理配置文件非常方便灵活,实现配置信息的动态加载,ShardingSphere支持很多配置中心,包括Apollo、Zookeeper、Nacos、Etcd等等。
sharding-orchestration-config模块是ShardingSphere配置中心的源码内存,有子模块sharding-orchestration-config-api、sharding-orchestration-config-zookeeper-curator、sharding-orchestration-config-apollo,分别是配置中心api提供的一些接口,Zookeeper配置中心的集成和Apollo配置中心的集成,下面就分别看一下这三个模块
配置中心API
这个模块中的类ConfigCenter、ConfigCenterConfiguration、监听事件接口DataChangedEventListener和数据改变事件DataChangedEvent,下面这个图是它们之间的关系:
ConfigCenter是配置中心的接口,它继承了TypeBasedSPI接口,底层使用了JDK的SPI机制,具体的实现由具体的配置中心来实现
DataChangedEventListener是数据改变事件的监听类,只有一个onChange()方法,DataChangedEvent这个类中定义了监听的数据改变的事件类型:更新、删除和忽略
public final class DataChangedEvent {
private final String key;
private final String value;
private final ChangedType changedType;
public enum ChangedType {
UPDATED, DELETED, IGNORED
}
}
Zookeeper模块
我们一般不使用Zookeeper的原生Api,而是使用集成框架Curator
使用Zookeeper配置中心
private static ConfigCenter curatorZookeeperConfigCenter = new CuratorZookeeperConfigCenter();
public static void init() {
EmbedTestingServer.start();
ConfigCenterConfiguration configuration = new ConfigCenterConfiguration(curatorZookeeperConfigCenter.getType(), new Properties());
configuration.setServerLists("127.0.0.1:3181");
curatorZookeeperConfigCenter.init(configuration);
}
使用起来也比较简单,
加载curatorZookeeperConfigCenter实现类,
先启动Zookeeper服务器,创建配置中心配置类对象,设置服务列表,调用CuratorZookeeperConfigCenter的init()方法进行加载
持久化数据直接调用CuratorZookeeperConfigCenter的persist()方法即可
curatorZookeeperConfigCenter.persist("/test", "xpp");
获取数据:
curatorZookeeperConfigCenter.get("/test");
源码分析
sharding-orchestration-config-zookeeper-curator模块的内容也比较简单,一个ConfigCenter接口的实现类CuratorZookeeperConfigCenter
初始化
CuratorZookeeperConfigCenter的init()方法就是初始化配置中心的方法,这个方法中先构建Curator客户端,然后启动客户端
增删改查
还有对数据节点增删改查的方法都是调用了CuratorFramework这个客户端的增删改查方法
监听
watch()方法监视配置服务器的key或路径,这个方法中会获取Zookeeper的监听事件的属性,构造DataChangedEvent对象来转化为ShardingSphere自身的事件,绑定监听器,当数据发生变化的时候会触发数据改变事件的监听类DataChangedEventListener的onChange()方法
Apollo模块
使用Apollo配置中心
使用Apollo配置中心和Zookeeper配置中心的使用差不多,先构造ApolloConfigCenter实例,然后调用它的初始化方法进行初始化
private static ConfigCenter configCenter = new ApolloConfigCenter();
@BeforeClass
public static void init() {
ConfigCenterConfiguration configuration = new ConfigCenterConfiguration(configCenter.getType(), new Properties());
configuration.setServerLists("http://config-service-url");
configuration.setNamespace("orchestration");
configCenter.init(configuration);
}
获取数据:configCenter.get("key1"),调用ApolloConfigCenter的get()方法即可
初始化
初始化方法中从配置对象中获取配置信息,然后设置到系统属性中,接着根据配置对象构建Config对象
增删改查
Apollo只有获取和判断key是否存在的方法,基于初始化构造的Config对象来使用的,获取key下的子节点、持久化等方法都会抛出异常
监听
监听方法和Zookeeper的逻辑类似,同样是转化为数据改变的事件实例DataChangedEvent
这样我们可以实现自己的配置中心通过SPI机制进行加载使用
总结
这篇文章主要讲了ShardingSphere与配置中心集成的模块,包括Curator的集成和Apollo的集成,大致流程都是一样,先进行客户端的初始化,然后调用相关的API即可。
❤️ 感谢大家
如果你觉得这篇内容对你挺有有帮助的话:
- 欢迎关注我❤️,点赞????????,评论????,转发????
- 有不当之处欢迎批评指正。