什么是rpc框架呢
RPC是远程过程调用(Remote Procedure Call)。 RPC 的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。为实现该目标,RPC 框架需提供一种透明调用机制,让使用者不必显式的区分本地调用和远程调用。
以上是百度的原句,确实不太好理解,换句简单的话来讲,就是Springboot项目中,Controler层需要注入Serevice的对象,从而调用Service层的方法,但是请思考一个问题,如果本地只是声明了一个Service接口,并没有做实现类,真正的实现类是你们公司别的项目组负责,现在你想要调用他们的实现类完成注入并调用她们实现类的方法,该怎么办呢?
rpc框架就是解决该问题,他可以实现就像没有通过网络请求一样,就好像本地有这个实现类一样,这就是rpc框架的强大之处
以上方法为本地调用远端方法的代码,在没有说明使用了rpc框架思路前,是不是就是觉得 它普通的像本地自己调用一样
rpc框架的工作原理
首先,我们可以想一下,既然本地没有这样的资源,要想得到就要通过网络,对吧,所以rpc框架需要结合一些网络框架,比如netty,tomcat,甚至Socket也可以,只要能够接收和发送网络请求就行
内部的逻辑也很简单,简单一点来说,首先,本地想要访问某一接口实现类的方法,这时就可以通过反射获得到一系列信息,比如接口名,方法名,参数类型等等
然后再将信息封装到一个RpcRequest类中的body中,可以看到该类实现了序列化接口Serializable,将信息包装到RpcRequest的对象中是为了模拟rpc协议,加上协议后肯定会有header,body嘛,将接口信息等等存在body中
客户端需要做的就是将信息封装成RpcRequest对象,然后发送,还需要将返回的RpcResponse对象解析。
然后服务器能够解析所有的RpcRequest对象,读取出body,然后通过反射创造出对象,并将结果封装到RpcResponse,然后客户端能够对返回的对象解包并返回
这就是rpc的工作原理
当然,也没这么简单,实际操作也不会就单纯的客户端与服务端沟通,一般是一堆客户端与一个注册中心,注册中心只是负责中转,去寻找应该向哪个客户端发送。
基本流程就是,本地客户端调用方法,代理类会将其调用的接口方法等一系列信息,序列化封装成rpc请求,然后发送给服务端,服务端解包并调用方法,然后执行结果再装包发给客户端,客户端解包然后将结果展示出来,即可