ShardingSphere的配置中心

举报
周杰伦本人 发表于 2022/11/29 17:40:02 2022/11/29
【摘要】 ShardingSphere的配置中心本篇文章源码基于4.0.1版本使用配置中心来管理配置文件非常方便灵活,实现配置信息的动态加载,ShardingSphere支持很多配置中心,包括Apollo、Zookeeper、Nacos、Etcd等等。sharding-orchestration-config模块是ShardingSphere配置中心的源码内存,有子模块sharding-orches...

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即可。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。