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事件监听,它被删除或者数据改变会触发监听事件
相关推荐
Nepxion Thunder是一个基于Java的分布式RPC框架,集成了Netty、Hessian、Kafka、ActiveMQ、Tibco、Zookeeper、Redis、Spring Web MVC、Spring Boot和Docker等技术。它支持多协议、多组件和多序列化,为开发者提供了...
Coroutine是基于Kilim/Promise JDeferred的协程式驱动框架,基于Apache Zookeeper的分布式规则存储和动态规则变更通知。 主要特性: 1. 基于微服务框架理念设计 2. 支持同步/异步调用 3. 支持串行/并行调用 4....
Nepxion Thunder是一款基于Netty + Hessian + Kafka + ActiveMQ + Tibco + Zookeeper(Curator Framework) + Redis + FST + Spring + Spring Web MVC + Spring Boot + Docker分布式RPC调用框架。架构思想主要是来自...
yinheli/docker-thunder-xware:latest 镜像打包下载 群晖 NAS DSM 系统,只要三步使用 Docker 安装迅雷远程下载
该项目是一款基于Kilim、Promise JDeferred、Zookeeper和Spring Boot技术的协程驱动分布式...该框架支持Nepxion Thunder、Dubbo和Motan等RPC调用的集成,并通过规则配置实现调用聚合,适用于构建高性能的分布式系统。
在压缩包"thunder-master"中,包含了Thunder框架的源码和其他相关资源。开发者可以通过查看源码,了解其内部实现原理,也可以直接使用它来快速搭建自己的GraphQL服务。在实际开发过程中,结合Go语言的标准库和第三方...
wine-thunder_0.6-2_all.deb用于在linux系统下,使用wine直接按装的迅雷软件,实现高速下载,在ubunut,fedora等linux版本中,实现直接点击安装
"thunder-master"这个压缩包子文件名可能代表项目的主分支或主代码库,这在Git等版本控制系统中很常见,"master"通常指的是默认分支,存放着项目的最新稳定版本。解压后,用户可以访问到项目的源代码、文档、构建...
Go-Thunder是一个基于BoltDB数据库的交互式Shell工具,主要设计用于方便地与BoltDB数据库进行交互,提供了一种命令行界面来操作和管理数据。BoltDB本身是Go语言实现的一个轻量级、文件存储的键值对数据库,它以其...
A10-Thunder_1030S方案白皮书.pdf
【压缩包子文件的文件名称列表】"thunder-oms" 这个文件名可能代表“Thunder Operation Management System”(迅雷运营管理系统),或者是一种特定的模块或服务。它可能包含了项目的源代码、配置文件、测试脚本等,...
标题中的“系统工具-文件下载-thunder_3.4.0.4338.zip”表明这是一款系统工具,具体来说是与文件下载相关的。这里的“thunder”很可能指的是迅雷,一个在中国广为人知的下载管理软件。版本号“3.4.0.4338”指示这是...
A10-Thunder_6430S方案白皮书.pdf
在使用Thunder时,用户应首先下载并解压“muesli-thunder.zip”文件,得到“thunder-master”目录。然后按照项目提供的安装指南编译并安装Thunder,最后通过命令行启动Thunder,开始探索和操作BoltDB数据库。对于...
A10 Thunder 930方案白皮书 A10 Thunder 930是A10 Networks公司推出的统一应用服务网关(UASG),采用64位系统、1U硬件,提供了极具性价比的解决方案。该设备基于A10极具扩展性的灵活高级核心操作系统(ACOS)架构...
docker pull yinheli/docker-thunder-xware:latest 创建一个下载目录. 用于挂载卷 mkdir data 运行 docker run -d \ --name=xware \ --net=host \ -v $(pwd)/data:/app/TDDOWNLOAD \ yinheli/docker-thunder-...
3D-Thunder-Lightning.zip,受航母指令启发的开源未来动作飞行模拟器游戏,3D建模使用专门的软件来创建物理对象的数字模型。它是3D计算机图形的一个方面,用于视频游戏,3D打印和VR,以及其他应用程序。
《A10 Thunder 5430S方案白皮书》是针对A10 Networks公司推出的Thunder 5430S高性能负载均衡解决方案的一份详细技术文档。在IT行业中,负载均衡是一项至关重要的技术,它确保了网络服务的高可用性和性能优化。A10 ...
Thunderbird是一款由Mozilla基金会开发的开源邮件客户端,它集成了电子邮件、新闻组、RSS阅读器和日历功能,为用户提供了一站式的通信解决方案。Thunderbird91.0b4是该软件的一个版本,其中“91.0b4”表示的是版本号...
Thunder Android OkHttp util package let response callback at MainThread(UIThread), also it‘s lifecycle safety. ⚠️ Thunder‘s code is based on SugarTask(Very nice code