`
nepxion
  • 浏览: 38554 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

(八) Nepxion-Thunder分布式RPC集成框架 - 注册中心

阅读更多

Nepxion-Thunder(QQ 群 471164539)发布在https://github.com/Nepxion/

 

1. 存储结构


点击查看大图

  • 应用存储区
    位于顶级节点application下,分不同的通信中间件进行存储。树状结构:
    对于服务端,[中间件名]/[组名]/[应用名]/service/[接口名]/[ApplicationEntity的Json串]
    对于调用端,[中间件名]/[组名]/[应用名]/reference/[接口名]/[ApplicationEntity的Json串]
    其中[应用名]节点下存储ApplicationConfig.java对象,内容如下:
    public class ApplicationConfig implements Serializable {
        private static final long serialVersionUID = -6769132534750910991L;
    
        private String application; // 应用名
        private String group;       // 组名
        private int frequency;      // 令牌刷新的时钟周期
    }
    
    其中service/[接口名]节点下存储ServiceConfig.java对象,内容如下:
    public class ServiceConfig implements Serializable {
        private static final long serialVersionUID = 5777064003531668211L;
    
        private String interfaze;     // 接口名
        private List<String> methods; // 方法列表
        private String secretKey;     // 密钥
        private int version;          // 版本号
        private long token;           // 最大令牌数
    }
    其中reference/[接口名]节点下存储ReferenceConfig.java对象,内容如下:
    public class ReferenceConfig implements Serializable {
        private static final long serialVersionUID = -4278894097968838119L;
    
        private String interfaze; // 接口名    
        private String secretKey; // 密钥    
        private int version; // 版本号
    } 
    其中ApplicationEntity的Json串属于临时节点,当服务端或者调用端下线后,在一定的超时时间后,会自动被删除。注意:最新版本加上了UUID和上下时间,便于服务治理,从存储结构图上并没有反应出来
  • 配置存储区
    位于顶级节点configuration下,集成式配置,所有通信中间件的配置都可以集中管理,服务端和调用端配置也集中管理。树状结构:
    [组名]/[应用名]
    其中[应用名]节点下存储Properties文本,内容跟thunder-ext.properties配置文件一致
  • 监控存储区
    位于顶级节点monitor下,子节点为第三方WebService监控系统的URL
  • 用户存储区
    位于顶级节点user下,子节点为UserEntity序列化对象

2. 实现思路

  1)RegistryInitializer.java - 暴露的注册中心初始化接口。默认的注册中心是用Zookeeper来实现,也可以换做其它开源框架来实现(例如Redis),只需要实现该接口即可

public interface RegistryInitializer extends ThunderDelegate {
    
    // 启动和注册中心的连接
    void start(RegistryEntity registryEntity) throws Exception;

    // 启动和注册中心的连接
    void start(RegistryEntity registryEntity, ThunderProperties properties) throws Exception;

    // 停止注册中心的连接
    void stop() throws Exception;
}


  2)RegistryExecutor.java - 暴露的注册中心查询,执行等功能接口。默认的注册中心是用Zookeeper来实现,也可以换做其它开源框架来实现(例如Redis),只需要实现该接口即可

public interface RegistryExecutor extends ThunderDelegate {

    // 设置注册中心初始化器
    void setRegistryInitializer(RegistryInitializer registryInitializer);
    
    // 设置协议实体
    void setProtocolEntity(ProtocolEntity protocolEntity);
    
    // 设置名称空间
    void setNamespace(String namespace);
    
    // 初始化注册中心Application相关环境
    void registerApplicationEnvironment(ApplicationEntity applicationEntity) throws Exception;
    
    // 初始化注册中心Configuration相关环境
    void registerConfigurationEnvironment() throws Exception;
    
    // 初始化注册中心Monitor相关环境
    void registerMonitorEnvironment() throws Exception;
    
    // 初始化注册中心User相关环境
    void registerUserEnvironment() throws Exception;

    // 注册Application
    void registerApplication(ApplicationEntity applicationEntity) throws Exception;
    
    // 注册Service目录
    void registerServiceCategory(String interfaze, ApplicationEntity applicationEntity) throws Exception;

    // 注册Service,并把服务所在的应用信息写入
    void registerService(String interfaze, ApplicationEntity applicationEntity) throws Exception;
    
    // 注册Reference目录
    void registerReferenceCategory(String interfaze, ApplicationEntity applicationEntity) throws Exception;

    // 注册Reference,并把服务所在的应用信息写入
    void registerReference(String interfaze, ApplicationEntity applicationEntity) throws Exception;
    
    // 注册Configuration
    void registerConfiguration(ApplicationEntity applicationEntity) throws Exception;
    
    // 注册Monitor
    void registerMonitor(String address) throws Exception;
    

    // 获取Application配置信息
    ApplicationConfig retrieveApplication(ApplicationEntity applicationEntity) throws Exception;

    // 获取Service配置信息
    ServiceConfig retrieveService(String interfaze, ApplicationEntity applicationEntity) throws Exception;

    // 获取Reference配置信息
    ReferenceConfig retrieveReference(String interfaze, ApplicationEntity applicationEntity) throws Exception;
    
    // 获取Property文本配置信息
    String retrieveProperty(ApplicationEntity applicationEntity) throws Exception;
    

    // 持久化Application配置信息
    void persistApplication(ApplicationConfig applicationConfig) throws Exception;

    // 持久化Service配置信息
    void persistService(ServiceConfig serviceConfig, ApplicationEntity applicationEntity) throws Exception;

    // 持久化Reference配置信息
    void persistReference(ReferenceConfig referenceConfig, ApplicationEntity applicationEntity) throws Exception;
    
    // 持久化Property文本配置信息
    void persistProperty(String property, ApplicationEntity applicationEntity) throws Exception;
    

    // 获取服务实例列表
    List<ApplicationEntity> getServiceInstanceList(String interfaze, ApplicationEntity applicationEntity) throws Exception;
    
    // 获取调用实例列表
    List<ApplicationEntity> getReferenceInstanceList(String interfaze, ApplicationEntity applicationEntity) throws Exception;
    
    // 获取监控实例列表
    List<String> getMonitorInstanceList() throws Exception;
    
    // 判断服务实例是否Online
    boolean isServiceInstanceOnline(String interfaze, ApplicationEntity applicationEntity) throws Exception;
    
    // 判断调用实例是否Online
    boolean isReferenceInstanceOnline(String interfaze, ApplicationEntity applicationEntity) throws Exception;
    
    // 判断监控实例是否Online
    boolean isMonitorInstanceOnline(String monitorInstance) throws Exception;
    
    // 获取用户列表
    List<UserEntity> retrieveUserList() throws Exception;
    
    // 获得用户
    UserEntity retrieveUser(String name) throws Exception;
    
    // 持久化用户
    void persistUser(UserEntity userEntity) throws Exception;
    
    // 删除用户
    void deleteUser(UserEntity userEntity) throws Exception;
    

    // 监听Application配置信息变更
    void addApplicationConfigWatcher(ApplicationConfig applicationConfig) throws Exception;
    
    // 监听Service配置信息变更
    void addServiceConfigWatcher(String interfaze, ApplicationEntity applicationEntity) throws Exception;
    
    // 监听Reference配置信息变更
    void addReferenceConfigWatcher(String interfaze, ApplicationEntity applicationEntity) throws Exception;
    
    // 监听Service上下线
    void addServiceInstanceWatcher(String interfaze, ApplicationEntity applicationEntity) throws Exception;
    
    // 监听Reference上下线
    void addReferenceInstanceWatcher(String interfaze, ApplicationEntity applicationEntity) throws Exception;

    // 监听Monitor上下线,用来保持注册中心和本地缓存一致
    void addMonitorInstanceWatcher() throws Exception;

    // 监听注册中心应用与注册中心断开后重连成功后,触发事件
    void addReconnectionListener();
    
    
    // 获取Category名称列表
    List<String> getCategoryList() throws Exception;
    
    // 获取Protocol名称列表
    List<String> getProtocolList() throws Exception;
    
    // 获取Group名称列表
    List<String> getGroupList() throws Exception;

    // 获取Application名称列表
    List<String> getApplicationList(String group) throws Exception;

    // 获取Service名称列表
    List<String> getServiceList(String application, String group) throws Exception;

    // 获取Reference名称列表
    List<String> getReferenceList(String application, String group) throws Exception;
    
    // 获取Configuration Group名称列表
    List<String> getConfigurationGroupList() throws Exception;

    // 获取Configuration Application名称列表
    List<String> getConfigurationApplicationList(String group) throws Exception;
    
    
    // 重置ApplicationConfig,所有属性值恢复为默认值
    void resetApplication(ApplicationEntity applicationEntity) throws Exception;

    // 重置ServiceConfig,所有属性值恢复为默认值
    void resetService(String interfaze, ApplicationEntity applicationEntity) throws Exception;
    
    // 重置ReferenceConfig,所有属性值恢复为默认值
    void resetReference(String interfaze, ApplicationEntity applicationEntity) throws Exception;
    
    // 更改ApplicationConfig令牌刷新频率, ApplicationEntity只需要带application和group(下同)
    void modifyApplicationFrequency(ApplicationEntity applicationEntity, int frequency) throws Exception;
    
    // 更改ApplicationConfig单个属性
    void modifyApplication(ApplicationEntity applicationEntity, MethodInvocation invocation) throws Exception;
    
    // 更改ApplicationConfig批量属性
    void modifyApplication(ApplicationEntity applicationEntity, List<MethodInvocation> invocationList) throws Exception;
    
    // 更改ServiceConfig密钥
    void modifyServiceSecretKey(String interfaze, ApplicationEntity applicationEntity, String secretKey) throws Exception;
  
    // 更改ServiceConfig版本
    void modifyServiceVersion(String interfaze, ApplicationEntity applicationEntity, int version) throws Exception;
    
    // 更改ServiceConfig令牌数
    void modifyServiceToken(String interfaze, ApplicationEntity applicationEntity, long token) throws Exception;
    
    // 更改ServiceConfig单个属性
    void modifyService(String interfaze, ApplicationEntity applicationEntity, MethodInvocation invocation) throws Exception;
    
    // 更改ServiceConfig批量属性
    void modifyService(String interfaze, ApplicationEntity applicationEntity, List<MethodInvocation> invocationList) throws Exception;
    
    // 更改ReferenceConfig密钥
    void modifyReferenceSecretKey(String interfaze, ApplicationEntity applicationEntity, String secretKey) throws Exception;

    // 更改ServiceConfig版本
    void modifyReferenceVersion(String interfaze, ApplicationEntity applicationEntity, int version) throws Exception;
    
    // 更改ReferenceConfig单个属性
    void modifyReference(String interfaze, ApplicationEntity applicationEntity, MethodInvocation invocation) throws Exception;
    
    // 更改ReferenceConfig批量属性
    void modifyReference(String interfaze, ApplicationEntity applicationEntity, List<MethodInvocation> invocationList) throws Exception;
}
  3)RegistryLauncher.java - 暴露给外部程序访问注册中心的接口
// 提供给外部程序所用
public interface RegistryLauncher {

    // 启动注册中心连接
    void start(String address, ProtocolType protocolType) throws Exception;

    // 停止注册中心连接
    void stop() throws Exception;

    // 获取注册中心执行器
    RegistryExecutor getRegistryExecutor();
}
  4)ZookeeperRegistryInitializer.java - 实现RegistryInitializer.java
  5)ZookeeperRegistryExecutor.java - 实现RegistryExecutor.java
  6)ZookeeperRegistryLauncher.java - 实现RegistryLauncher.java
  7)ZookeeperApplicationConfigWatcher.java - 实现对“[中间件名]/[组名]/[应用名]“路径的EXISTS事件监听,对应的ApplicationConfig里内容改变,会触发监听事件(令牌刷新的时钟周期控制)
  8)ZookeeperServiceConfigWatcher.java - 实现对“[中间件名]/[组名]/[应用名]/service/[接口名]”路径的EXISTS类型监听,对应的ServiceConfig里内容改变,会触发监听事件(令牌,密钥,版本控制)
  9)ZookeeperReferenceConfigWatcher.java - 实现对“[中间件名]/[组名]/[应用名]/reference/[接口名]”路径的EXISTS类型监听,对应的ReferenceConfig里内 容改变,会触发监听事件(密钥,版本控制)
  10)ZookeeperInstanceWatcher.java -  实现对“[中间件名]/[组名]/[应用名]/service或reference/[接口名]”路径的GET_CHILDREN事件监听,对应的它的子节点增添或者删除会触发监听事件(服务/调用上下线)
  11)ZookeeperInstanceEventInterceptor.java -  实现对上下线的事件拦截
  12)ZookeeperMonitorInstancesWatcher.java - 实现对monitor”路径的GET_CHILDREN事件监听,对应的它的子节点增添或者删除会触发监听事件(监控中心上下线)
  13)ZookeeperReconnectionListener.java - 实现重连监听,一旦Zookeeper重启或者由于出网络问题后又恢复和Zookeeper连接等,会触发重连监听

  14)ZookeeperUserWatcher.java - 实现对“monitor”路径的GET_CHILDREN事件监听,对应的它的子节点增添或者删除会触发监听事件(监控中心上下线)
  15)ZookeeperUserWatcherCallback.java - 实现对“user/[userName]”路径的EXISTS事件监听,它被删除或者数据改变会触发监听事件

  • 大小: 185.3 KB
  • 大小: 372.7 KB
  • 大小: 18 KB
分享到:
评论

相关推荐

    基于Java的Thunder分布式RPC框架设计源码

    Nepxion Thunder是一个基于Java的分布式RPC框架,集成了Netty、Hessian、Kafka、ActiveMQ、Tibco、Zookeeper、Redis、Spring Web MVC、Spring Boot和Docker等技术。它支持多协议、多组件和多序列化,为开发者提供了...

    基于Kilim、Promise JDeferred、Zookeeper和Spring Boot的协程分布式调用聚合框架设计源码

    该项目是一款基于Kilim、Promise JDeferred、Zookeeper和Spring Boot技术的协程驱动分布式...该框架支持Nepxion Thunder、Dubbo和Motan等RPC调用的集成,并通过规则配置实现调用聚合,适用于构建高性能的分布式系统。

    基于SpringBoot的企业oa管理系统(源码+数据库+万字文档)300

    企业oa管理系统,系统包含两种角色:管理员、用户,主要功能如下。 管理员: 1. 个人中心:管理管理员个人信息和进行相关操作。 2. 用户管理:管理用户的基本信息和权限设置。 3. 公告信息管理:发布和管理企业内部公告信息。 4. 客户关系管理:管理客户信息、跟进记录和销售机会等。 5. 通讯录管理:管理企业内部员工通讯录信息。 6. 日程安排管理:管理个人和团队的日程安排和会议安排。 7. 车辆信息管理:管理企业车辆的基本信息和使用情况。 8. 文件信息管理:管理企业内部文件的上传、下载和共享。 9. 工作日志管理:记录和管理员工的工作日志和任务完成情况。 10. 上班考勤管理:管理员工的上班打卡和考勤记录。 11. 工资信息管理:管理员工的工资信息和薪资发放。 用户: 1. 个人中心:管理个人信息和进行相关操作。 2. 公告信息管理:查看和阅读企业内部公告信息。 3. 客户关系管理:查看和管理与自己相关的客户信息和销售机会。 4. 通讯录管理:查找和查看企业内部员工通讯录信息。 5. 日程安排管理:查看和管理个人的日程安排和会议安排。 6. 车辆信息管理:查看和申请企业车辆的使

    Autox-v7-arm64-v8a-release-v7.1.2.apk

    AutoX.js 是一个基于 JavaScript 的自动化工具,主要用于安卓设备的自动化操作。它是 Auto.js 的一个分支,提供了更多的功能和更高的兼容性。以下是关于 AutoX.js 的一些基本介绍和使用方法。

    TypeScript全面进阶指南

    1.开篇:用正确的方式学习 TypeScript 2.工欲善其事:打造最舒适的 TypeScript 开发环境 3.进入类型的世界:理解原始类型与对象类型 4.掌握字面量类型与枚举,让你的类型再精确一些 5.函数与 Class 中的类型:详解函数重载与面向对象 6.探秘内置类型:any、unknown、never 与类型断言 7.类型编程好帮手:TypeScript 类型工具(上) 8.类型编程好帮手:TypeScript 类型工具(下) 9.类型编程基石:TypeScript 中无处不在的泛型 10.结构化类型系统:类型兼容性判断的幕后 11.类型系统层级:从 Top Type 到 Bottom Type 12.类型里的逻辑运算:条件类型与 infer 13.内置工具类型基础:别再妖魔化工具类型了! 14.反方向类型推导:用好上下文相关类型 15.数类型:协变与逆变的比较 16.了解类型编程与类型体操的意义,找到平衡点 17.内置工具类型进阶:类型编程进阶 18.基础类型新成员:模板字符串类型入门 19.类型编程新范式:模板字符串工具类型进阶 20.工程层面的类型能力:类型声明、类型

    3gpp-29504-j20.docx

    本文档是3GPP组织发布的关于5G系统中统一数据仓库服务(UDR)的技术规范,旨在为第三阶段(Relase 19)提供协议和数据模型的详细定义。该规范主要针对Nudr接口,规定了通过此接口NF服务消费 限时福利!送硅基流动100w deepseek token,支持api调用:https://cloud.siliconflow.cn/i/VkH0G5VX

    西门子G120 Vf和矢量控制的区别及相关参数设置

    西门子G120 Vf和矢量控制的区别及相关参数设置

    【宝城期货-2025研报】短期降息预期落空,国债期货震荡筑底.pdf

    【宝城期货-2025研报】短期降息预期落空,国债期货震荡筑底.pdf

    基于yolov5识别算法实现的DNF自动脚本源码.zip

    基于yolov5识别算法实现的DNF自动脚本源码.zip

    HR人力资源管理系统PersonManage

    HR人力资源管理系统PersonManage

    【宝城期货-2025研报】有色日报:有色午后走强,铜增仓上行.pdf

    【宝城期货-2025研报】有色日报:有色午后走强,铜增仓上行.pdf

    商城程序电脑端手机端微信端三合一板

    商城程序电脑端手机端微信端三合一板

    基于SpringBoot的个人理财系统(源码+数据库+万字文档)292

    个人理财系统,系统包含两种角色:管理员、用户,系统分为前台和后台两大模块,主要功能如下。 【管理员】: 个人中心:管理员可以在个人中心查看和修改自己的个人信息。 用户管理:管理员可以对用户进行管理,包括添加新用户、编辑用户信息、删除用户以及查看用户列表。 账单类型管理:管理员可以管理账单类型,包括添加新的账单类型、编辑账单类型信息、删除账单类型以及查看账单类型列表。 【用户】: 个人中心:用户可以在个人中心查看和修改自己的个人信息。 收入账单管理:用户可以添加和管理收入账单,包括记录收入的金额、时间、来源等信息,查看、编辑和删除已记录的收入账单。 支出账单管理:用户可以添加和管理支出账单,包括记录支出的金额、时间、用途等信息,查看、编辑和删除已记录的支出账单。 理财计划管理:用户可以制定和管理理财计划,包括设定目标、计划时间、计划金额等信息,查看、编辑和删除已设定的理财计划。 统计分析管理:用户可以查看自己的收入和支出情况的统计分析结果。 备忘录管理:用户可以添加、编辑和删除备忘录。 二、项目技术 编程语言:Java 数据库:MySQL 项目管理工具:Maven 前端技术Vue

    51-图解分布式训练(七)—— accelerate 分布式训练 详细解析.pdf

    面试题关注有更多资源,私信免费的

    【宝城期货-2025研报】宝城期货橡胶早报.pdf

    【宝城期货-2025研报】宝城期货橡胶早报.pdf

    20210928-以面向对象思想编写单片机程序.zip

    以面向对象思想编写单片机程序

    更新!中国各区县-平均风速数据(1951-2024年)

    ## 介绍 平均风速是描述一个地区风力强弱的重要气象指标,是指空间某一点,在给定的时段内各次观测的风速之和除以观测次数,其广泛应用于气候研究、农业、风能开发等领域 本分享数据包含中国各区县的平均风速数据,涵盖了1951年至2024年之间共21w+条数据,数据按年度进行整理 ## 一、中国各区县平均风速数据的介绍 数据年份:1951-2024年 数据范围:区县 数据格式:面板数据 样本数量:21万+ ## 二、数据指标

    Delphi 12.3控件之UPX-4.2.2(压缩exe文件).rar

    UPX_4.2.2(压缩exe文件).rar

    基于Python Tkinter的智能书库管理系统代码

    基于Python Tkinter的智能书库管理系统代码

    Tutorial Design of Smart Sensors-ISSCC2010.rar

    Tutorial Design of Smart Sensors-ISSCC2010.rar

Global site tag (gtag.js) - Google Analytics