RPC框架的简单实现

一 实现的思路

开发四个pom工程,打成jar包
  1. rpc-common 项目
    (1). 定义 Netty ChannelHandler 的编解码 handler : RpcDecoder RpcEncoder
    (2). 定义 RpcRequest RpcReponse 实体类
    该项目作为公共项目 , 供rpc-client 和 rpc -server 依赖调用
  2. rpc-registry-zookeeper 项目
    (1). 该项目中 中定义两个工具类 ZookeeperRegistry (zookeeper注册) ZookeeperDiscover(zookeeper发现);
    该项目作为公共项目 , 供rpc-client 和 rpc -server 依赖调用.
    rpc -server 将ip port注册到 zookeeper key为服务的反射名称 value为ip port
    rpc -client 通过 zookeeper 发现 ip port ,通过反射名称 获取 ip port;
  3. rpc-client 项目 该项目定义两个类RpcClient RpcProxy
    (1)RpcProxy 为 发布服务的接口创建 代理类; 在执行服务接口的方法时, 获取服务接口的 (名称.方法名 和 参数)
    a. 通过接口的完成路径名称 从zookeeper获取 ip.port
    b. 将类名 方法名 和 参数 放入RpcRequest 对象 并封装在ByteBuffer中
    c. 调用RpcClient 的send() 方法 通过Netty Nio发送至服务端
		return (T)	Proxy.newInstance(  interfaceClass.getClassLoader(),  new Class<?>[]{interfaceClass},
  				new InvocationHandler() { 
  				@Override 
  				  public Object invoke(Object proxy, Method method, Object[] args) throws T){
							........以上逻辑的实现位置
				} } )

(2)RpcClient 主要定义send()方法 创建netty nio的远程访问, 通过bootstrap 将访问远程ip 传送参数 ,整合各种handler
该项目 供 客户端微服务 依赖调用 其本身依赖rpc-common 和 rpc-registry-zookeeper两个项目
注意: 在调用服务接口时,必须通过RpcProxy获取接口的代理类之后,再调用接口的方法,该远程访问才能起作用.

  1. rpc-server 该项目 主要作用为将自定义的微服务 注册到zookeeper 并发布出去处理请求
    (1)发布个服务端微服务到zookeeper 通过自定义注解@RpcService 后去所有发布的微服务类 并注册为zookeeper的key值
    (2)RpcServer 的setApplicationContext() 中 通过ServerBootStrap 完成微服务绑定ip port 发布
    (3)RpcServerHandler 处理接收到的requst请求 , 根据 requst中的类名 通过反射 获取项目 中该类的静态bean 对象,通过 方法名,bean对象,参数类型,及参数值 反射调用该方法. 获取返回值通过netty write写回调用方;
    该项目 供 服务端微服务 依赖调用 其本身依赖rpc-common 和 rpc-registry-zookeeper两个项目

cglib的作用 : 不用通过接口就能创建代理类,通过jvm的字节码文件创建代理类

代码: 地址待粘贴

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值