# fox-rpc-core **Repository Path**: cuic/fox-rpc-core ## Basic Information - **Project Name**: fox-rpc-core - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-02-21 - **Last Updated**: 2021-04-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # fox-rpc-core **一个可扩展的RPC框架** **1.0版本地址:** https://gitee.com/cuic/fox-root **Spring-boot-starter:** https://gitee.com/cuic/spring-boot-starter-fox #### 软件架构 **主要流程调用关系图** ![输入图片说明](https://images.gitee.com/uploads/images/2021/0223/151245_d291591e_419644.png "fox-core调用关系图.png") **主要模块说明** - **RpcApplicationConfigurer**: 应用统一配置类。其可配置参数和扩展API都由此类参与,并在初始化应用时传入到 **Context** 中完成整个应用的启动。也是用户定制化模块的入口。 - **RpcApplicationContext**: Rpc核心的入口。对外提供的API供用户调用,对内是整体应用最核心组件,它的作用包括对内部各个组件的配置、有序化启动和各组件间的连接。其主要组件如下所示: - **RpcObjectFactory**: Rpc容器接口实现。其主要目的对需要Rpc接口代理对象的和Rpc接口实现类对象的存储和调用。 - **RpcEventPublisher**: Rpc事件发布器。基于RpcEvent(事件)、RpcEventListener(事件监听) 针对各个事件进行统一发布的API。例NodeChannelCloseListener监听服务双端连接关闭时发布事件供其他模板/外置应用感知到。 - **RpcApplicationProcessor**: 应用处理器。在应用启动的过程中针对Context内部应用流程进行补充/开发的处理器。其最主要子类实现接口为RpcApplicationDefinitionRegisteredProcessor。该类的作用是为context注册需要进行Rpc调用的接口及其实现类的注册。 - **Aware**: 感知应用类。由RpcApplicationConfigurer加入的组件可以实现其子接口可以让context感知到这些对象需要context中的某些内部属性。例RpcEventPublisherAware、RpcObjectFactoryAware等。 - **RpcDefinition**: Rpc注册表。把需要实现Rpc调用的接口及其实现类的配置注册在上下文中,其后由各个相关组件来使用。 - **RpcProxy**: Rpc消费方对象代理的具体实现。目前内部实现的为JDK-Proxy - **RpcRegister**: Rpc节点注册器。 该类的目的是把本地Rpc调用的实现注册到注册中心,及从注册中心获取到本地需要接口调用的远程节点信息。其2个实现类如下所示: - **AbstractPullRpcRegister**: 拉式注册器。需要客户端自己从注册中心拉取相关的节点信息。 - **AbstractPushRpcRegister**: 推式注册器。至少在API层面上由注册中心发送相关节点信息到本地。本版中基于Zookeeper其现的注册中心所需要的注册器正式该抽象类的实现。 - **RpcClient**: Rpc调用客户端。它是下层API的封装。它由代理对象调用后,经过负载均衡策划选出相应的节点、针对需要发送消息进行协议化和编码后发送给服务方,并根据服务方返回消息解码后返回给上层API。其主要组件如下所示: - **RpcMetaspace**: 节点空间信息,是逻辑节点,由多个真实节点(RpcNode)列表组成的虚拟节点。他的主要目的是针对真实节点状态的管理和相关的负载操作。 - **RpcNode**: 从远程注册中心获取的Rpc远程节点信息 - **Rule**: 负载均衡器。为RpcMetaspace中的RpcNode列表提供负载均衡策略。 - **ConsumeInvoker**: 消费方执行器。它可以在代理对象调用方法的前后加入一些定制化逻辑。属于API扩展接口。 - **RpcClientRequestInterceptor**: 客户端请求拦截器: 它可以根据客户请求具体的参数进行拦截也可以根据客户端特定的请求添加/移除一些参数 - **RpcRequestDispatcher**: 服务端请求分发器。它接受远程客户端的请求根据相关路由得到方法调用的结果/错误信息并返回给客户端。其主要组件如下所示: - **RpcRouter**: Rpc路由Rpc调用接口实现方法的映射。根据远程客户端传来的路由信息进行匹配得到相关的方法调用。 - **ProvideInvoker**: 服务方方法执行器。它可以在目标方法调用前后进行相关的逻辑操作属于外部扩展API - **RpcMessageConverter**: 消息转换器。主要职能是对远程发送的业务数据进行转换。当前版本的转换器有kryo、json、byte2String。 - **RpcEndPoint**: Rpc最底层API。endpoint提供底层服务器的启动和连接功能,供上层API调用实现消息的发送。其主要组件如下所示: - **RpcChannel**: 客户端与服务端连接后返回的连接句柄通道。它的目的是接受与发送相关的信息。 - **RpcMessage**: 客户端与服务端之间协议的请求和响应具体实现类。以RpcClientRequest、RpcClientResponse、RpcServerRequest、RpcServerResponse这4个接口实现对应的实现类。 - **RpcProtocolEncoder**: 底层协议编码器,针对相关的协议进行编码工作。 - **RpcProtocolDecoder**: 底层协议解码器,针对相关的协议进行解码工作。 #### 扩展接口使用 应用的所有扩展接口由 **RpcApplicationConfigurer** 配置完成。所有接口可以实现Aware其子接口获取应用在应用配置完成后其内部的相应的组件。可扩展接口如下所示(具体功能如模块说明): - RpcApplicationProcessor - RpcApplicationDefinitionRegisteredProcessor - ConsumeInvoker - ProvideInvoker - RpcClientRequestInterceptor - GlobalRuleFactory: - RpcMessageConverter - RpcProxyFactory - AbstractPushRpcRegister - AbstractPullRpcRegister #### 属性说明 对外可配置类为 **RpcApplicationConfigureAdapter** - getApplicationName: 应用名称 (必填) - getPort:本地服务暴露的端口 (必填) - getBind:本机服务暴露的地址 (必填) - getRegister: 注册中心客户端(必填,ZookeeperRegister或自定义) - getGlobalGroup: 全局默认分组 (选填,默认default) - getGlobalProtocol: 全局默认协议名称 (选填,默认fox) - getGlobalConverterName: 全局默认转换器名称 (选填,默认kryo) - getGlobalRuleFactory: 全局默认负载均衡器工厂 (选填 默认RoundRobinRuleFactory) - addRpcMessageConverter: 添加消息转换器 (选填) - addProvideInvokers:添加生产方执行器 (选填) - addConsumeInvokers: 添加消费方执行器 (选填) - addRpcApplicationProcessor:添加应用执行器 (选填) - addRpcEventListeners: 添加对应事件监听器 (选填) - addClientRequestInterceptors: 添加客户端请求拦截器(选填) #### 使用说明 1. 需要JAVA-JDK_1.8以上 2. maven构建项目 3. 默认注册中心为zookeeper_3.6.0以上 #### 版本期望 1. 协议栈引入脱离底层Netty-Api 2. 多种消息转换器引入 3. Springboot-starter 4. 基于Raft的注册中心 5. 分布式调度中心模块 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)