1 Star 1 Fork 4

Nieves / T_RPC_Framework

forked from Ticsmyc / T_RPC_Framework 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 8.44 KB
一键复制 编辑 原始数据 按行查看 历史

T_RPC_Framework

一个rpc远程过程调用的框架。

使用方法

见项目 : T_RPC_Framework_Demo

步骤(基于3.7版本):

  1. 引入依赖

    <dependency>
        <groupId>fun.ticsmyc.rpc</groupId>
        <artifactId>t-rpc-all</artifactId>
        <version>3.7</version>
    </dependency>
  2. 在resources目录下,放入trpc.properties 配置文件 (可选)

    port=8999  # 作为服务提供方,使用的端口号 (默认是8888)
    loadbalancer=round  # 作为服务消费方,使用的负载均衡机制,可选random(随机)和round(轮询),默认是随机
    serializer=json # 作为服务消费方,发送rpc请求时使用的负载均衡器,可选kryo(默认)、json、protobuf、hessian
    networkIO=netty #可用netty和socket 。 亲测netty更快
  3. 在配置类声明

    @EnableTRPC
  4. 提供服务:

    在想要提供的服务接口上声明

    @TRPCInterface //这一步是为了解决某个实现类实现了多个接口的情况 

    在想要提供的服务实现类上声明

    @TRPCService(group="t")   // group属性是为了处理一个接口想要注册多个实现类的情况消费服务
  5. 消费服务:

    通过@RpcClient注解即可注入rpc服务

    @RpcClient(group = "t")
    private HelloService helloService;

原理图

image-20201109152554001

目录说明

└─src
    └─main
        ├─java
        │  └─fun
        │      └─ticsmyc
        │          └─rpc
        │              ├─client :客户端
        │              │  ├─proxy :动态代理
        │              │  └─transport :网络传输层
        │              │      ├─bio  :基于socket实现的传输
        │              │      └─netty :基于netty实现的传输
        │              │          ├─codec  :编码、解码器
        │              │          └─handler :自定义的处理器
        │              ├─common :通用
        │              │  ├─entity :网络通信使用的实体类
        │              │  ├─enumeration :枚举类
        │              │  ├─exception :异常类
        │              │  ├─factory :工厂
        │              │  └─serializer :序列化器
        │              │      └─impl
        │              ├─nacos
        │              │  ├─loadbalance 负载均衡
        │              │  │  └─impl
        │              │  └─registry 注册中心
        │              │      └─impl
        │              ├─server :服务端
        │              │  ├─handler :业务:根据收到的信息调用相应服务
        │              │  ├─registry :服务注册:供服务端使用
        │              │  │  └─impl
        │              │  └─transport :网络传输层
        │              │      ├─bio
        │              │      └─netty
        │              │          ├─codec
        │              │          └─handler
        │              └─test  :用于开发时测试
        │                  ├─bio
        │                  ├─netty
        │                  └─service
        │                      └─impl
        └─resources

版本说明

版本历史

v1.0

对应git版本

  • 使用BIO+线程池实现网络通信
  • 使用Java原生的序列化/反序列化机制

v2.0

对应git版本

  • 使用Netty实现网络通信
  • 使用Jackson作为序列化工具

v2.1

对应git版本

  • 添加二进制的Kryo序列化器,效率更高

v2.2

对应git版本

  • 添加Hession序列化器

v2.3

对应git版本

  • 重新定义协议

    image-20201028112849326

    • 魔数: 致敬JVM ,为0xCAFEBABE
    • 协议版本号:用于判断接收方能否兼容这个数据包的格式
    • 序列化器类型: 标识序列化数据包使用的序列化器
    • 数据长度
    • 真实数据
  • 修改序列化器为懒汉单例、增加序列化器编号。解码器使用的序列化器改为由收到的数据包指定

  • 增加协议版本号、魔数

  • 增加一些错误类型、枚举类型

v2.4

对应git版本

  • 增加netty客户端连接失败重试机制
  • 增加Protobuf序列化器
  • 优化Serializer枚举类 和 SerializerCode枚举类
  • 序列化器改为单例懒加载模式,减少不必要的内存消耗

v3.0

对应git版本

  • 合并server、client、common三个工程

v3.1

对应git版本

  • 增加木兰license
  • 增加Nacos注册中心,可以直接根据服务名称调用服务,不需要ip地址
  • 更新BIO通信协议,与Netty兼容
  • 优化代码,处理滥用的static

v3.2

对应git版本

  • 增加rpc请求号和请求号校验机制
  • 优化客户端和服务端的构造器,提供多种默认机制
  • 新增客户端和服务端之间的心跳机制
  • 新增服务端负载均衡+两种负载均衡机制
  • 优化RpcRequestSender,在创建对象时就创建连接,发送请求后不关闭连接。

v3.3

对应git版本

  • 优化网络通信,增加channel复用机制;
  • 心跳功能可以正常使用了
  • 使用CompletableFuture优化客户端RpcResponse的接收
  • 客户端做成单例,增加客户端全局配置和一些初始化异常类

v3.4

对应git版本

  • 服务端增加基于注解的服务自动注册机制(自己实现的注解扫描,效率低、不稳定)
  • 优化客户端的失败重试机制

v3.5

对应git版本

  • 删除3.4中自定义的注解机制
  • 使用Spring提供的applicationContext.getBeansWithAnnotation实现基于注解的服务注册功能。
  • 服务端全面容器化,使用ServerProperties进行配置
  • 在NettyRpcServer中不再使用applicationContext实现自动服务注册,改为BeanPostProcessor。在Bean初始化时进行注册。优化了调用getBeansWithAnnotation方法,遍历容器中所有Bean的时间开销。
  • 删除测试代码

v3.6

对应git版本

  • 服务端注册服务时增加group属性,解决一个接口有多个实现时,不知调用哪个的情况。
  • 增加nacos中服务的注销功能(还未找到合适的使用方法,没有应用)
  • 增加客户端的基于注解消费服务功能,并且支持消费实现了同一个接口但不同组的服务(但只支持Netty方式,不支持BIO方式)。

v3.7

  • 优化代码结构
  • 使用 Runtime.getRuntime().addShutdownHook 机制 和DisposableBean机制来保证系统正常退出时,从nacos中注销服务
  • 修改nacos中注销服务的方法为线程安全
  • 优化了使用方式,用户只需要在配置类中声明@EnableTRPC,即可自动注册发布服务、自动为接口注入实现类
  • 可以使用trpc.properties配置文件来配置端口、覆盖均衡器、序列化器
  • 修复:bootstrap.connect().sync()监听器线程同步错误,导致多次连接重试,最终与同一个服务器建立多个连接的情况。
  • 修复:json序列化器对心跳包进行序列化时的空指针问题
Java
1
https://gitee.com/bing-dong/t-rpc-framework.git
git@gitee.com:bing-dong/t-rpc-framework.git
bing-dong
t-rpc-framework
T_RPC_Framework
master

搜索帮助