首页 > 其他分享 >ShardingSphere的注册中心

ShardingSphere的注册中心

时间:2022-10-20 16:34:04浏览次数:53  
标签:中心 ShardingSphere Zookeeper 注册 数据源 properties

ShardingSphere的注册中心

本篇文章源码基于4.0.1版本

注册中心在ShardingSphere的作用就是用来管理各种数据源,在使用的时候,所有数据源通过向注册中心的指定目录下创建节点,所有使用这些数据源的服务监听这个目录,当有新的数据源加入的时候会通知这些服务,当数据源宕机的时候,也会收到通知,ShardingSphere支持的注册中心有Zookeeper、Etcd等等

入口

在进行加载数据源的时候构造OrchestrationShardingDataSource对象,它的构造方法会创建分片编排门面类ShardingOrchestrationFacade,这个类一看名字就知道了这里使用了门面模式。它的成员变量有注册中心、配置服务、状态服务和监听管理器。

状态服务保存的是数据实例和数据源节点信息。

监听管理器ShardingOrchestrationListenerManager又分为配置变更监听管理器和状态变更监听管理器,初始化的过程是通过注册中心的watch()方法来发布相应的事件,被@Subscribe注解修饰的方法来处理相应的事件。

注册中心的加载是通过RegistryCenterServiceLoader的load()方法来进行加载,这里就使用了JDK的SPI机制来进行加载响应的注册中心

sharding-orchestration-reg模块是ShardingSphere注册中心的源码内容,它 的子模块有sharding-orchestration-reg-api、sharding-orchestration-reg-zookeeper-curator、sharding-orchestration-reg-nacos,分别是注册api提供的一些接口,Zookeeper注册中心的集成和nacos注册中心的集成,下面就分别看一下这三个模块

注册中心API

这一块的代码内容和我们上篇文章说的配置中心API模块的内容差不多,同样有监听类DataChangedEventListener、监听事件类DataChangedEvent、异常RegistryCenterException,注册中心配置类RegistryCenterConfiguration和注册中心接口RegistryCenter

它的实现类同样有两个,Zookeeper注册中心实现类CuratorZookeeperRegistryCenter和nacos注册中心实现类NacosRegistryCenter

Zookeeper模块

当看完配置中心模块的代码,再看注册中心模块的代码就很好理解了

使用Zookeeper配置中心

在使用上同样是加载CuratorZookeeperRegistryCenter实例,然后启动Zookeeper服务器,创建注册中心配置类,设置服务列表,调用CuratorZookeeperRegistryCenter的init()方法进行初始化,整体逻辑和配置中心十分相似,这里就不详细说了。

Nacos模块

使用Nacos注册中心

先进行初始化操作:

    public static void init() {
        Properties properties = new Properties();
        properties.setProperty("group", "SHARDING_SPHERE_DEFAULT_GROUP");
        properties.setProperty("timeout", "3000");
        RegistryCenterConfiguration configuration = new RegistryCenterConfiguration(nacosRegistryCenter.getType(), properties);
        configuration.setServerLists("127.0.0.1:8848");
        nacosRegistryCenter.init(configuration);
    }

调用了NacosRegistryCenter的init()方法:

    public void init(final RegistryCenterConfiguration config) {
        try {
            Properties properties = new Properties();
            properties.put("serverAddr", config.getServerLists());
            properties.put("namespace", null == config.getNamespace() ? "" : config.getNamespace());
            configService = NacosFactory.createConfigService(properties);
        } catch (final NacosException ex) {
            log.debug("exception for: {}", ex.toString());
        }
    }

设置服务地址和命名空间,利用Nacos工厂类NacosFactory来创建服务

增删改查

在获取数据的时候根据dataId、组名获取响应的数据:

configService.getConfig(dataId, group, timeoutMs);

在进行持久化操作的时候直接调用了更新方法,根据dataId,组名来设置相应的值更新配置:

configService.publishConfig(dataId, group, value);

总结

这篇文章我们将了ShardingSphere的注册中心,注册中心支持Nacos和Zookeeper,整体逻辑和配置中心的逻辑差不多,在注册中心加载的时候使用了JDK的SPI机制灵活加载注册中心,变更事件是通过 EventBus 来实现的。

❤️ 感谢大家

如果你觉得这篇内容对你挺有有帮助的话:

  1. 欢迎关注我❤️,点赞

    标签:中心,ShardingSphere,Zookeeper,注册,数据源,properties
    From: https://blog.51cto.com/u_15460453/5780269

相关文章

  • ShardingSphere与链路追踪
    ShardingSphere与链路追踪本篇文章源码基于4.0.1版本ShardingSphere的功能非常强大,它不仅与注册中心、配置中心相结合的很好,它还支持链路追踪,了解过链路追踪技术的肯定......
  • 初识区块链 如何在去中心化网络中形成共识
    本文将从日常生活如何形成共识,类比到在每个人都可以伪装自己的身份的网络上如何构建共识。再以此谈谈区块链网络中是如何做的,以及这种共识是怎么构成区块链的基石的。最后......
  • Eureka 源码之服务端接收注册信息
    Eureka注册中心系列文章汇总:[领导让我研究Eureka源码|启动过程][领导“叕”让我研究Eureka源码:注册过程[值得收藏的Eureka控制台详解]大家好,我是悟空。本篇从......
  • os,json模块实现用户登录注册
    用户登录注册功能importosimportjson#注册功能#1.获取执行文件所在的目录路径base_dir=os.path.dirname(__file__)#D:/pythonProject03/day19#2.拼接......
  • Eureka 源码之客户端首次获取注册表
    大家好,我是悟空。Eureka注册中心系列文章汇总:[领导让我研究Eureka源码|启动过程][领导“叕”让我研究Eureka源码:注册过程][值得收藏的Eureka控制台详解][原来......
  • JDBC-快速入门和DriverManager注册驱动
    JDBC-快速入门步骤:1.导入驱动jar包(依赖也可以)<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.......
  • 收敛比公式是什么意思(解析数据中心网络收敛比设计)
    什么是流量收敛:数据包在交换机中做转发的时候,由于交换机的性能问题或者网络架构问题,不能实现全线速转发而出现拥塞丢包,这时候输出流量小于输入流量的情况就叫做流......
  • C++11 实现一个自动注册的工厂
    之前在项目代码里面看到同事写了个自动注册的工厂类,虽然当时我看不懂,但我大受震撼。今天又重新温习了一下这种写法,分享给大家,可见学好C++是多么的重要。实现动机工厂方法......
  • 4-04-注册中心原理剖析与设计实践(上)_ev
    目录        第一种更好        以集群维度通过key-vlist    没太懂_超时处理          cap定义:在1.......
  • Dubbo 04: zookeeper注册中心
    借助zookeeper注册中心进一步改正直连式+接口工程的不足,更好的管理服务者提供的功能以及消费者对服务的申请访问需要用到3个相互独立的maven工程,工程1为maven的jav......