好久没有更新了哇
首先说RPC之前,需要先了解RPC是什么,RPC的工作原理是什么,这才能做到心中有数。
RPC的全称是Remote Procedure Call,远程方法调用。它是发生于两个进程之间,
一个服务端,一个客户端。服务端提供服务,客户端请求服务端。简单点理解呢,像HTTP请求
一样,发起一个请求,然后就返回一个结果。而RPC呢,只不过是在本地调用远程的一个方法,然后远程
返回一个结果。照着自己的思路把这个过程写下来。
- 服务端和客户端之间要通信,那就不可避免的需要网络通信。客户端与服务端需要建立网络连接
(可以用Netty作为网络通讯的框架)
- 接下来,调用一个方法,服务端需要知道哪些数据。作为服务端需要知道你要调用哪个对象的哪个方法,有哪些参数,而这些数据则需要客户端通过网络传输给服务端。这个过程就涉及到编解码,需要定义自己的编码器和解码器(可以用阿里的fastjaon, google的protobuff等等)。
- 最后,客户端的操作希望是在本地调用自己的方法一样,但本地是没有这些方法的实现的,所以需要用代理对象去调用,当代理对象调用这个方法时,则对应向服务端发起一个请求,然后等待服务器的结果返回。这个过程就需要用到jdk或者cglib的动态代理。
总结一下上面的流程
客户端调用方法 --> 代理对象封装参数,向服务端请求(等待结果返回) --> 服务端收到请求,调用对应方法,将结果返回给客户端
当然,上面只是最简单的流程,RPC的实现还有一些细节。
比如,客户端怎么知道服务端的这些服务呢,可以采用Zookeeper等注册中心将服务注册,让客户端可以自动发现。再比如,需要监控这些服务的调用数据等,可以增加监控系统。很多细节都可以慢慢琢磨。
如果错误的地方,请纠正,大家一起学习进步。