轻量级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)。调用了上述序列化和反序列化工具。

原文地址:https://www.cnblogs.com/JohnTeslaaa/p/12392972.html