`
nepxion
  • 浏览: 38472 次
  • 性别: 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调用的集成,并通过规则配置实现调用聚合,适用于构建高性能的分布式系统。

    sblim-gather-provider-2.2.8-9.el7.x64-86.rpm.tar.gz

    1、文件内容:sblim-gather-provider-2.2.8-9.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/sblim-gather-provider-2.2.8-9.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

    基于pringboot框架的图书进销存管理系统的设计与实现(Java项目编程实战+完整源码+毕设文档+sql文件+学习练手好项目).zip

    本图书进销存管理系统管理员功能有个人中心,用户管理,图书类型管理,进货订单管理,商品退货管理,批销订单管理,图书信息管理,客户信息管理,供应商管理,库存分析管理,收入金额管理,应收金额管理,我的收藏管理。 用户功能有个人中心,图书类型管理,进货订单管理,商品退货管理,批销订单管理,图书信息管理,客户信息管理,供应商管理,库存分析管理,收入金额管理,应收金额管理。因而具有一定的实用性。 本站是一个B/S模式系统,采用Spring Boot框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得图书进销存管理系统管理工作系统化、规范化。本系统的使用使管理人员从繁重的工作中解脱出来,实现无纸化办公,能够有效的提高图书进销存管理系统管理效率。 关键词:图书进销存管理系统;Spring Boot框架;MYSQL数据库

    2024中国在人工智能领域的创新能力如何研究报告.pdf

    2024中国在人工智能领域的创新能力如何研究报告.pdf

    安全生产_人脸识别_移动目标跟踪_智能管控平台技术实现与应用_1741777778.zip

    人脸识别项目实战

    人脸识别_TF2_Facenet_训练预测应用仓库_1741778670.zip

    人脸识别项目实战

    安全人脸识别_对抗攻击_多模型集成_减少扰动_竞赛方案_Ne_1741779504.zip

    人脸识别项目实战

    Python实现基于CEEMDAN完全自适应噪声集合经验模态分解时间序列信号分解的详细项目实例(含完整的程序,GUI设计和代码详解)

    内容概要:本文档详细介绍了基于CEEMDAN(完全自适应噪声集合经验模态分解)的方法实现时间序列信号分解的具体项目。文中涵盖项目背景介绍、主要目标、面临的挑战及解决方案、技术创新点、应用领域等多方面内容。项目通过多阶段流程(数据准备、模型设计与构建、性能评估、UI设计),并融入多项关键技术手段(自适应噪声引入、并行计算、机器学习优化等)以提高非线性非平稳信号的分析质量。同时,该文档包含详细的模型架构描述和丰富的代码样例(Python代码),有助于开发者直接参考与复用。 适合人群:具有时间序列分析基础的科研工作者、高校教师与研究生,从事信号处理工作的工程技术人员,或致力于数据科学研究的从业人员。 使用场景及目标:此项目可供那些面临时间序列数据中噪声问题的人群使用,尤其适用于需从含有随机噪音的真实世界信号里提取有意义成分的研究者。具体场景包括但不限于金融市场趋势预测、设备故障预警、医疗健康监控以及环境质量变动跟踪等,旨在提供一种高效的信号分离和分析工具,辅助专业人士进行精准判断和支持决策。 其他说明:本文档不仅限于理论讲解和技术演示,更着眼于实际工程项目落地应用,强调软硬件资源配置、系统稳定性测试等方面的细节考量。通过完善的代码实现说明以及GUI界面设计指南,使读者能够全面理解整个项目的开发流程,同时也鼓励后续研究者基于已有成果继续创新拓展,探索更多的改进空间与发展机遇。此外,针对未来可能遇到的各种情况,提出了诸如模型自我调整、多模态数据融合等发展方向,为长期发展提供了思路指导。

    监护人,小孩和玩具数据集 4647张原始图片 监护人 食物 孩子 玩具 精确率可达85.4% pasical voc xml格式

    监护人,小孩和玩具数据集 4647张原始图片 监护人 食物 孩子 玩具 精确率可达85.4% pasical voc xml格式

    根据提供的内容可以构建以下_1741777949.zip

    人脸识别项目实战

    `计算机视觉_人脸识别_Python_OpenCV_树莓派毕业设计`.zip

    人脸识别项目实战

    智慧生产企业园区解决方案PPT(54页).pptx

    在智慧园区建设的浪潮中,一个集高效、安全、便捷于一体的综合解决方案正逐步成为现代园区管理的标配。这一方案旨在解决传统园区面临的智能化水平低、信息孤岛、管理手段落后等痛点,通过信息化平台与智能硬件的深度融合,为园区带来前所未有的变革。 首先,智慧园区综合解决方案以提升园区整体智能化水平为核心,打破了信息孤岛现象。通过构建统一的智能运营中心(IOC),采用1+N模式,即一个智能运营中心集成多个应用系统,实现了园区内各系统的互联互通与数据共享。IOC运营中心如同园区的“智慧大脑”,利用大数据可视化技术,将园区安防、机电设备运行、车辆通行、人员流动、能源能耗等关键信息实时呈现在拼接巨屏上,管理者可直观掌握园区运行状态,实现科学决策。这种“万物互联”的能力不仅消除了系统间的壁垒,还大幅提升了管理效率,让园区管理更加精细化、智能化。 更令人兴奋的是,该方案融入了诸多前沿科技,让智慧园区充满了未来感。例如,利用AI视频分析技术,智慧园区实现了对人脸、车辆、行为的智能识别与追踪,不仅极大提升了安防水平,还能为园区提供精准的人流分析、车辆管理等增值服务。同时,无人机巡查、巡逻机器人等智能设备的加入,让园区安全无死角,管理更轻松。特别是巡逻机器人,不仅能进行360度地面全天候巡检,还能自主绕障、充电,甚至具备火灾预警、空气质量检测等环境感知能力,成为了园区管理的得力助手。此外,通过构建高精度数字孪生系统,将园区现实场景与数字世界完美融合,管理者可借助VR/AR技术进行远程巡检、设备维护等操作,仿佛置身于一个虚拟与现实交织的智慧世界。 最值得关注的是,智慧园区综合解决方案还带来了显著的经济与社会效益。通过优化园区管理流程,实现降本增效。例如,智能库存管理、及时响应采购需求等举措,大幅减少了库存积压与浪费;而设备自动化与远程监控则降低了维修与人力成本。同时,借助大数据分析技术,园区可精准把握产业趋势,优化招商策略,提高入驻企业满意度与营收水平。此外,智慧园区的低碳节能设计,通过能源分析与精细化管理,实现了能耗的显著降低,为园区可持续发展奠定了坚实基础。总之,这一综合解决方案不仅让园区管理变得更加智慧、高效,更为入驻企业与员工带来了更加舒适、便捷的工作与生活环境,是未来园区建设的必然趋势。

    第八届全国大学生创新创业年会-创新创业展示项目集

    本届年会的主题是“青春梦想创新创业”。通过学术论文报告、创新创业项目展示、创业项目推介、工作研讨、联谊活动、大会报告等活动,全面展示大学生最新的创新创业成果。年会共收到491所高校推荐的学术论文756篇、创新创业展示项目721项、创业推介项目156项,合计1633项,为历届年会数量最高。经过36所“985”高校相关学科专家的初评以及国家级大学生创新创业训练计划专家组的复选,最终遴选出可参加本次年会的学术论文180篇,创新创业展示项目150个,创业推介项目45项,共计375项,涉及30个省市的236所高校。年会还收到了来自澳门特别行政区、俄罗斯的13项学术论文及参展项目。这些材料集中反映了各高校最新的创新创业教育成果,也直接体现了当代大学生的创新思维和实践能力。

    人脸识别_实时_ArcFace_多路识别技术_JavaScr_1741771263.zip

    人脸识别项目实战

    6ES7215-1AG40-0XB0-V04.04.01固件4.5

    6ES7215-1AG40-0XB0_V04.04.01固件4.5

    在无人机上部署SchurVins的yaml配置文件

    在无人机上部署SchurVins的yaml配置文件

    uniapp实战商城类app和小程序源码​​​​​​.rar

    uniapp实战商城类app和小程序源码,包含后端API源码和交互完整源码。

    基于MobileNet轻量级网络实现的常见30多种食物分类

    基于MobileNet轻量级网络实现的常见30多种食物分类,包含数据集、训练脚本、验证脚本、推理脚本等等。 数据集总共20k左右,推理的形式是本地的网页推理

    2024年央国企RPA市场研究报.pdf

    2024年央国企RPA市场研究报.pdf

Global site tag (gtag.js) - Google Analytics