# wt-rpc **Repository Path**: wygandwind/wt-rpc ## Basic Information - **Project Name**: wt-rpc - **Description**: 本项目为远程过程调用(RPC)框架的简单实现,主要使用Netty、Spring、Nacos、Caffeine、Java动态代理等技术实现了RPC框架,并添加自定义负载均衡策略以及超时重试功能提升框架稳定性 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 2 - **Created**: 2021-11-03 - **Last Updated**: 2023-11-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # wt-rpc #### 项目介绍 本项目为远程过程调用(RPC)框架的简单实现,主要使用Netty、Spring、Nacos、Caffeine、Java动态代理等技术实现了RPC框架,并添加自定义负载均衡策略以及超时重试功能提升框架稳定性 #### 详细设计 项目底层基于Netty实现TCP通信,发送请求以及响应消息;并提供多种序列化方法,包括gson、kryo、proto,用户可以通过配置文件选择具体的序列化方法 项目通过Nacos作为服务注册中心,实现了服务注册与发现,并实现了简单的负载均衡机制:随机、轮询两种策略,可以根据需要选择zookeeper或者redis等工具作为注册中心,只需要实现相关的接口并作简单的配置即可 项目通过Spring实现了基于注解的服务注册以及服务消费功能,主要通过ImportBeanDefinitionRegistrar实现了基于注解的服务注册功能,通过BeanPostProcessor实现了基于注册的服务消费功能 项目通过Caffeine作为本地缓存,将客户端发送的请求id进行缓存,防止请求的重复提交;同样,用户可以基于此进行二次开发,选择合适的缓存套件缓存请求id 项目通过Java动态代理技术实现了服务消费者通过Netty发送请求,调用服务提供者提供的服务,并提供了超时重试的机制 #### 项目运行 1、直接将项目clone到本地 2、启动本地的Nacos,然后修改wt-rpc-core模块的配置信息:wt-rpc.properties,修改Nacos的地址、用户名和密码 3、查看test-rpc-server模块的示例,运行NettyApplication的main方法,然后去Nacos可以发现对应的服务注册信息 4、查看test-rpc-client模块的示例,运行TestClient的mian方法,接着就会调用test-rpc-server中的服务实现 tips: 如果想要查看相关的日志信息,可以修改wt-rpc-core下的logback.xml配置文件,将日志输出级别设置为DEBUG,这样就可以查看RPC框架的详细DEBUG信息 #### 配套教程 TODO #### 参与贡献 项目架构或者代码实现或许有许多不合理的地方,如果各位读者有兴趣的话,可以和我一起完善这个框架! 1. Fork 本仓库 2. 新建 dev_yourname 分支,进行相应的代码修改或者完善 3. 提交代码,并对你的修改或者完善进行详细的描述 4. 新建 Pull Request