# xi-rpc **Repository Path**: realrx/xi-rpc ## Basic Information - **Project Name**: xi-rpc - **Description**: 基于Vert.x开发的高性能可扩展rpc框架 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-03-19 - **Last Updated**: 2024-03-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 项目介绍 XI-RPC是一款参考Dubbo开源项目,基于Vert.x开发的高性能可扩展的RPC框架。 提供 xi-rpc-springboot-starter,引入依赖,配置好配置信息,通过注解就可以轻松使用XI-RPC框架,调用远程服务就像调用本地服务一样简单。 支持通过SPI机制可动态扩展注册中心、序列化器、负载均衡器、重试策略与容错策略。 支持Mock模拟调用,用于快速跑通业务流程。 ## 架构图 ### 简单框架架构图 ![img_1.png](imgs/img_1.png) ### 框架详细调用架构图 ![img.png](imgs/img.png) ## 使用 1. 服务提供者与服务消费者模块皆引入依赖 ``` xml com.xiaoxi xi-rpc-spring-boot-starter 0.0.1-SNAPSHOT ``` 2. 编写业务服务公共类接口 ``` java /** * 用户实体类 */ public class User implements Serializable { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } ``` ```java /** * 用户服务接口 */ public interface UserService { /** * 获取用户服务 * @param user * @return */ User getUser(User user); } ``` 3. 配置服务提供者 1. 配置配置信息 properties文件配置: ``` properties xirpc.name=xirpc xirpc.version=1.0 xirpc.serverPort=9090 xirpc.mock=false xirpc.serializer=jdk xirpc.registryConfig.registry=etcd xirpc.registryConfig.address=http://localhost:2380 xirpc.registryConfig.timeout=1000L ``` name: 名称 version: 版本号 serverPort: 服务提供者服务器端口(用于设置Tcp服务器端口号) mock: 是否开启mock模拟调用 serializer: 指定序列化器 registry: 指定注册中心 address: 注册中心地址 timeout: 调用服务超时时间 2. 启动类上添加 **@EnableRpc** 注解 3. 实现业务服务提供类接口,编写服务提供方法,在类上添加**@RpcService**注解 ```java @Service @RpcService public class UserServiceImpl implements UserService { @Override public User getUser(User user) { System.out.println("用户名是:" + user.getName()); return user; } } ``` 4. 配置服务消费者 1. 配置配置信息 properties文件配置: ``` properties xirpc.name=xirpc xirpc.version=1.0 xirpc.serverPort=9090 xirpc.mock=false xirpc.serializer=jdk xirpc.registryConfig.registry=etcd xirpc.registryConfig.address=http://localhost:2380 xirpc.registryConfig.timeout=1000L ``` 2. 启动类上添加**@EnableRpc(needServer = false)**注解 (needServer = false不启动tcp服务器,服务消费者不需要) 3. 使用**@RpcReference**注解,将服务类在需要的地方注入即可调用 ```java @Service public class ExampleServiceImpl{ @RpcReference private UserService userService; public void test(){ User user = new User(); user.setName("xiaoxi"); User result = userService.getUser(user); System.out.println("调用结果是:" + result.getName()); } } ``` ## 配置 ### 框架配置属性 | 属性 | 用途 | 默认值 | 可选值 | | :---------------------------- | :------------------------------ | --------------------- | -------------------------------------- | | xirpc.name | 名称 | xi-rpc | | | xirpc.version | 版本号 | 1.0 | | | xirpc.serverHost | 服务提供者内置tcp服务器主机地址 | localhost | | | xirpc.serverPort | 服务提供者内置tcp服务器主机端口 | 9090 | | | xirpc.mock | 是否开启mock模拟调用 | false | | | xirpc.serializer | 指定序列化器 | jdk | jdk、json、kryo、hessian | | xirpc.loadBalancer | 指定负载均衡器 | roundRobin | roundRobin、random、consistentHash | | xirpc.retryStrategy | 指定重试策略 | no | no、fixedInterval | | xirpc.tolerantStrategy | 指定容错策略 | failFast | failFast、failSafe、failOver、failBack | | xirpc.registryConfig.registry | 指定注册中心 | etcd | etcd、zookeeper | | xirpc.registryConfig.address | 注册中心地址 | http://localhost:2380 | | | xirpc.registryConfig.timeout | 服务调用超时时间 | 1000L | | ## 扩展 ### 关于扩展 该框架是基于SPI机制可对序列化器、负载均衡器、重试策略与容错策略进行动态扩展。 各功能类扩展前公共操作: 在**resources**目录下创建**META-INF**目录,在META-INF下创建**xirpc**目录,在xirpc目录下创建**custom**目录。 ![img_2.png](imgs/img_2.png) ### 扩展序列化器 1. 实现 **Serializer** (com.xiaoxi.xirpc.serializer.Serializer)类,并重写序列化与反序列化方法。 2. 在custom文件夹里,创建文件名为自己扩展序列化器类的完全限定类名(例:com.xiaoxi.xirpc.serializer.JdkSerializer)的文件。 3. 在创建的文件里编写 自己扩展的序列化器名=自己扩展序列化器类的完全限定类名,一个序列化器一行,例: ```text jdk=com.xiaoxi.xirpc.serializer.JdkSerializer xxx=com.xiaoxi.xirpc.serializer.XxxSerializer ``` 4. 在配置文件里配置自己实现的序列化器即可 (xirpc.serializer=jdk或xirpc.serializer=xxx) ### 扩展注册中心 1. 实现 **Registry** (com.xiaoxi.xirpc.registryr.Registryr)类,并重写注册注销等方法。 2. 后续步骤与扩展序列化器步骤2.3.4一样 ### 扩展负载均衡器 1. 实现 **LoadBalancer** (com.xiaoxi.xirpc.loadbalancer.LoadBalancer)类,并重写负载均衡方法。 2. 后续步骤与扩展序列化器步骤2.3.4一样 ### 扩展重试策略 1. 实现 **RetryStrategy** (com.xiaoxi.xirpc.fault.retry.RetryStrategy)类,并重写重试方法。 2. 后续步骤与扩展序列化器步骤2.3.4一样 ### 扩展容错策略 1. 实现 **TolerantStrategy** (com.xiaoxi.xirpc.fault.tolerant.TolerantStrategy)类,并重写容错方法。 2. 后续步骤与扩展序列化器步骤2.3.4一样