09-netty基础-手写rpc-原理-01

netty系列文章:

|------------------------------------------------------------------------------------------------------------------------------------|
| 01-netty基础-socket |
| 02-netty基础-java四种IO模型 |
| 03-netty基础-多路复用select、poll、epoll |
| 04-netty基础-Reactor三种模型 |
| 05-netty基础-ByteBuf数据结构 |
| 06-netty基础-编码解码 |
| 07-netty基础-自定义编解码器 |
| 08-netty基础-自定义序列化和反序列化 |
| 09-netty基础-手写rpc-原理-01 |
| 10-netty基础-手写rpc-定义协议头-02 |
| 11-netty基础-手写rpc-支持多序列化协议-03 |
| 12-netty基础-手写rpc-编解码-04 |
| 13-netty基础-手写rpc-消费方生成代理-05 |
| 14-netty基础-手写rpc-提供方(服务端)-06 |

1 涉及到的知识点

  • netty自定义编解码(自定义消息头、传输对象)
  • 支撑多序列化实现
  • 服务消费方使用spring生成代理对象并放入到spring容器中
  • 使用netty实现客户端和服务端通信代码
  • 使用EnvironmentAware实现用yml中读取配置
  • ......

2 代码以及分支说明

地址:https://gitee.com/huyanqiu6666/netty-rpc-protocol.git

分支说明:

|---------------------------------|-------------------------|
| 分支名 | 描述 |
| master | 搭建多模块的项目 |
| 20250805-01-base-provider | 服务端协议api |
| 20250805-02-protocol | 自定义协议相关的类 |
| 20250805-03-serializer | 序列化相关的类 |
| 20250805-04-encoder-decoder | 编解码 |
| 20250805-05-spring-bean | 增加spring为客户端增加代理类、依赖注入等 |
| 20250806-06-netty-server-client | 增加客户端连接服务端 |
| 20250806-07-consumer-config | 增加客户端配置,ip、端口号等 |
| 20250806-08-provider-config | 服务端编写以及配置 |

3 项目结构

4 rpc流程

1、自定义服务提供方和消费方注解 BonnieRemoteReference(消费方)、BonnieRemoteService(提供方)

2、自定义协议头(包含序列化方式)、协议体

3、支撑多种序列化方式,比如java、json

4、自定义编解码

5、客户端启动的时候在spring容器加载bean定义文件之后,初始化之前,为添加了BonnieRemoteReference的类属性生成Bean的代理对象放入到spring容器中

6、服务端启动的时候,在spring的对象初始化完成之后,识别出被BonnieRemoteService修饰的类,将这种类下的所有方法都缓存到Map中,以供后续处理客户端的请求反射调用

后面的文章会详细介绍涉及到的实现rpc的重点知识