从0到1手把手实现RPC|01 RpcProvider本地实现

RPC的简化版原理如下图(核心是代理机制)。

在这里插入图片描述

  • 1.本地代理存根: Stub
  • 2.本地序列化反序列化
  • 3.网络通信
  • 4.远程序列化反序列化
  • 5.远程服务存根: Skeleton
  • 6.调用实际业务服务
  • 7.原路返回服务结果
  • 8.返回给本地调用方

注意处理异常。

RpcProvider的本地实现

1、工程结构
  • rpc-core是核心实现类
  • rpc-demo-api是定义实际业务服务的接口
  • rpc-demo-provider是业务接口实现类

在这里插入图片描述

2、RpcProvider在启动过程中把@RpcProvider标记的方法存到Map中去

在启动时加载配置
在这里插入图片描述

在配置中创建启动类
在这里插入图片描述

启动类在创建的过程,会将带有@RpcProvider注解的类存放到Map中。
@PostConstruct注解可以在bean的初始化后进行执行,刚好满足我们的常见(存储bean)
使用 ApplicationContextAware接口是为了获取Spring的应用上下文ApplicationContext,从里面获取bean。
在这里插入图片描述

RpcProvider是自定义的一个注解,用来表示这个类是一个服务提供者。
在这里插入图片描述

一个服务提供者,订单服务实现类。
在这里插入图片描述

3、在调用的时候通过方法名称找到应该调用的方法,通过反射完成调用。

发起一个http请求调用,获取订单信息。
在这里插入图片描述

RpcRequest封装请求参数,包括:接口名称、方法名、参数。
在这里插入图片描述

一个请求入口

在这里插入图片描述

请求调用,根据服务全限定名(就是一个类的全名)去map存找对应的类,找到后,通过反射发起方法调用。
在这里插入图片描述

响应类RpcResponse统一封装结果,返回状态,响应结果数据。
在这里插入图片描述

实际的调用结果,就成功了。
在这里插入图片描述

4、有哪些问题?

如果一个接口有多个实现类怎么办?
错误消息怎么处理?
方法有多个重载方法怎么办?

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值