轻量级RPC框架整理
(1)代码目录
(2)代码书写顺序:
1. rpc-sample-api:服务接口, 对外提供访问的名称。目前只写了HelloService一个接口。
2.rpc-sample-server:(服务)接口的实现类。
目前写了两个实现类。这两个类均用RpcService注解标注 (涉及知识点:用注解发布服务)
一个RpcBootStrap类,用来启动server。具体为加载本模块下的Spring.xml文件和rpc.properties 文件(service_address和registry_address)。
3. rpc-server:RPC服务器(使用Netty实现的一个支持NIO的RPC服务器)
RpcServer:做一些channel、channelPipeline的配置,启动Netty服务器
RpcServerHandler:handler,处理器。RPC 服务端(实际的)处理器(用于处理 RPC 请求)。
--channelRead0():创建并初始化响应对象->调用handle()方法处理请求->将请求结果设置到响应对象中->调用writeAndFlush()写入channel中,即服务端把响应消息发送给客户端
--handle():根据反射调用实际的服务【重点编写的关键函数】。根据request中所请求的服务名字,获得服务对象;执行反射,调用该对象的方法,完成真正的服务端方法调用。
RpcService:自定义RPC 服务注解。目的是为了采用注解进行服务发布。参考:只需要在类上使用该注解就可以申明一个服务,dubbo后来才支持该功能,最开始是基于xml文件配置的
4.rpc-sample-client:
java:测试代码
resources:配置客户端的代码。spring.xml:配置服务发现组件、RPC代理
5.rpc-client
RpcProxy:使用动态代理(可用jdk的动态代理或者cglib)实现RPC代理。
创建动态代理对象包括:
创建 RPC 请求对象并设置请求属性
获取 RPC 服务地址
从 RPC 服务地址中解析主机名与端口号
创建 RPC 客户端对象并发送 RPC 请求(new RpcClient(),Rpc客户端的作用就是发送Rpc请求)
返回 RPC 响应结果
RpcClient:使用Netty实现RPC客户端(发送Rpc请求)
创建并初始化 Netty 客户端 Bootstrap 对象
编码 RPC 请求
解码 RPC 响应
处理 RPC 响应
连接 RPC 服务器
写入 RPC 请求数据并关闭连接
返回 RPC 响应对象
6.zookeeper:服务注册和服务发现
ZookeeperServiceDiscovery:
创建 ZooKeeper 客户端
获取 service 节点
获取 address 节点
获取 address 节点的值 返回地址
ZookeeperServiceRegistry:
创建 ZooKeeper 客户端
创建 registry 节点(持久)
(如果不存在的话才创建)
创建 service 节点(持久)
创建 address 节点(临时)
7.Common:一些工具类
bean:Request和Response对象
util:序列化方法(ProtoStuff实现)、字符串处理工具
codec:RpcEncoder(先in,再序列化后out)和RpcDecoder(先in,再反序列化后out)。调用了上述序列化和反序列化工具。