概述
RPC(Remote Procedure Call),远程过程调用,是一个计算机通信协议,该协议允许运行一个进程调用另一个进程,而程序员无需额外为这个交互作用编程。
两个或者多个应用程序分布在不同的服务器上,他们之间的调用在客户端看来,就跟调用本地方法一样。
场景的RPC框架用阿里的dubbo、Google的gRPC,Apache的thrift、spring 的SpringCloud等。
调用流程:

clientsub是客户端本地调用的代理,ServerSub是服务端的代理。
流程解释:
- 服务消费端本地调用方式来调用远程服务。
- ClientSub接收到调用后,负责将方法,参数等,封装成能够进行网络传输的消息体。
- ClientSub将消息进行编码后发送到服务端。
- 服务端的ServerSub接收到消息后对消息进行解码。
- 找到服务器本地的对应服务进行调用,并把返回值返回给ServerSub。
- ServerSub对返回值进行编码并发送回消费端。
- clientSub对返回进行解码。
- 服务消费端得到调用结果。
RPC就是把2-7封装起来,然后消费端只需编码1的代码,和8的代码。
实战
这个demo仅仅使用了String类型的编解码器,也就是说只能进行String类型的数据传输。但也麻雀虽小,五脏俱全了。完成了基本的RPC通信。
代码量有点多,这里就直接上GitHub了,然后下面说说逻辑。
有三个包模块:

rpc-api:公共接口。
rpc-client:消费端。
rpc-provider:提供端。
使用方式:
服务端
- 服务端配置文件配置服务提供者。
目录固定是类路径下的providerconfig目录下的配置文件,不包括子目录。


服务端的配置文件只有2个项,分别是提供者的id,提供者的类全限定名称。
public static void

本文深入浅出地介绍了RPC(远程过程调用)的概念,通过一个简单的Java实现展示了RPC如何使客户端像调用本地方法一样调用远程服务。涉及的RPC框架包括阿里Dubbo、Google gRPC和Apache Thrift。文章详细阐述了RPC的调用流程,从客户端的本地调用到服务端的响应,以及中间的编码、解码和线程处理。此外,还提供了一个仅支持String类型传输的RPC通信demo,包括服务端和客户端的启动与配置。最后,文章探讨了RPC的实现原理,强调了线程池、NettyIO和粘包拆包问题的解决方案。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



