# pRPC
**Repository Path**: brucepang/pRPC
## Basic Information
- **Project Name**: pRPC
- **Description**: A lightweight and easy-to-use RPC framework created by Bruce Pang
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2023-02-16
- **Last Updated**: 2024-08-03
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
prpc
基于Netty
[English](README.md) | 简体中文
## 📚简介
该框架是一个采用Netty实现的RPC框架,适用于Spring Boot项目,计划更新支持SpringCloud,SpringCloudAlibaba。 核心代码模块都有清晰的注解,主要是用于学习之用。
### 开发环境介绍
JDK:1.8
maven:3.8.6
Spring Boot:2.5.6
Netty:4.1.66.Final
zookeeper:3.4.10
nacos:1.3.0
lombok:1.16.18
fastjson:1.2.76
### 工程结构

## 安装教程
在pom文件中加上依赖:
```xml
com.brucepang.prpc
prpc-protocol
1.4.1
```
## 使用说明
该工程中:
prpc-common为框架公共组件部分,存放后续的诸多配置类与工具类
prpc-protocol为prpc框架本身,可以导出jar包作为使用;
prpc-registry为服务发现工程,目前支持zookeeper和nacos;
其余子工程分别对应为demo:
prpc-common ---> 公共组件
prpc-demo ---> 示例代码(下面三部分组成)
prpc-api ---> 存放公共接口部分
prpc-consumer ---> 服务消费方
prpc-provider ---> 服务提供方
prpc-protocol ---> 框架本身
prpc-registry ---> 注册中心与服务发现
快速体验【纯体验,不写代码篇】:
1.打开zookeeper或nacos
注意:
1.1 zookeeper本项目采用的是3.4.10版本,如果使用3.5.x版本,需要修改prpc-registry pom.xml中的curator-version为3.x.x以上版本,以下为项目中的配置:
```xml
UTF-8
2.13.0
```
2.打开prpc-provider工程,配置application.yml,如下是参数配置:
```yaml
com:
brucepang:
prpc:
applicationName: prpc-provider
port: 20880 # 服务端口【prpc启动端口号】
address: nacos://127.0.0.1:8848 # 注册中心地址 zookeeper默认端口2181, eureka默认端口8761, nacos默认端口8848
```
3.若不需要编写业务代码,直接运行PrpcProviderApplication.java,即可启动服务提供方。
4.打开prpc-consumer工程,配置application.yml,如下是参数配置:
```yaml
com:
brucepang:
prpc:
applicationName: prpc-provider
port: 20880 # 服务端口【prpc启动端口号】
address: nacos://127.0.0.1:8848 # 注册中心地址 zookeeper默认端口2181, eureka默认端口8761, nacos默认端口8848
```
5.若不需要编写业务代码,直接运行PrpcConsumerApplication.java,即可启动服务调用方。
6.启动完成后,
访问http://localhost:8080/hello?name=BrucePang,您能够看到:

访问http://localhost:8080/fire?name=刘三石,您能够看到:

框架目前只是功能基础实现版,尚有很多优化点,
例如:
1.目前只支持zookeeper和nacos,后续会支持eureka;
2.反射调用使用的是jdk动态代理,性能远远比不上asm字节码生成,后续会支持asm字节码生成;
3.服务列表目前每次都是远程获取的,尚未做本地缓存,后续会支持本地缓存
4.打包成springboot-starter,方便使用;
5.序列化使用jdk自带的序列化,性能远远比不上msgpack,后续会支持msgpack;
6.为了实现切换本地调用和远程调用,目前使用了有比较多冗余代码没有采用合适的设计模式,后续会优化;
....
本版本总结:
1.基于netty实现了基本的rpc功能;
2.期间对于spring生命周期的理解更加深刻,并且对于spring的底层组件使用场景有了更深刻的印象;
3.实现了最基本的负载均衡,目前只支持随机负载均衡;
1.4.1优化点:
1.解决被打成jar包启动时出现循环依赖问题;
2.服务提供方接口注册时机实现采用 懒汉式 实现;
3.服务提供方与服务消费方yml配置统一,不再显示区分提供方与消费方;
4.不再提供regitryType来区分注册中心,改为address地址区分;
1.4.2 SPI扩展插件:
### 如何参与PRPC开源贡献
1. 将项目fork到您自己的仓库
2. 将项目克隆到本地
3. 修改代码并提交到自己的仓库
4. 向原始项目提交拉取请求
### 与我联系
1. 邮箱:brucepang0618@gamil.com
2. 微信:brucepang0618
> 不允许非法项目使用,后果自负
### 天涯何处无芳草,给颗星星好不好┭┮﹏┭┮]
### 后续会持续更新,欢迎大家提出宝贵意见,一起学习,一起进步。