1. RPC 调用流程分析

1.1 RPC基本介绍

(1)RPC(Remote Procedure Call)远程过程调用,是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。

(2)两个或多个应用程序都分布在不同的服务器上,它们之间的调用都像是本地方法调用一样。

netty入门(二十七)用 Netty 实现 DubboRPC-LMLPHP

(3)常用的 RPC 框架有:比较知名的阿里的 Dubbo、google 的 gRPC、GO语言的 rpcx、Apache 的 thrift,Spring 旗下的 Spring Cloud。

1.2 RPC调用流程

netty入门(二十七)用 Netty 实现 DubboRPC-LMLPHP

 术语说明:在 RPC 中,Client 叫服务消费者,Server 叫服务提供者。

RPC调用流程说明:

(1)服务消费方(Client)以本地调用方式调用服务;

(2)client stub 接收到调用后负责将方法、参数等封装成能够进行网络传输的消息体;

(3)client stub 将消息进行编码并发送到服务端;

(4)server stub 收到消息后进行解码;

(5)server stub 根据解码结果调用本地的服务;

(6)本地服务执行并将结果返回给 server stub;

(7)server stub 将返回导入结果进行编码并发送至消费方;

(8)client stub 接收到消息并进行解码;

(9)服务消费方(client)得到结果。

小结:RPC 的目标就是将 2-8 这些步骤都封装起来,用户无需关心这些细节,可以像调用本地方法一样即可完成远程服务调用。

2.基于 Netty 实现 DubboRPC

2.1 需求说明

(1)Dubbo 底层使用了 Netty 作为网络通讯框架,要求用 Netty 实现一个简单的 RPC 框架。

(2)模仿 Dubbo,消费者和提供者约定接口和协议,消费者远程调用提供者的服务,提供者返回一个字符串,消费者打印提供者返回的数据。底层网络通信使用 Netty 4.1.20。

2.2 设计说明

(1)创建一个接口,定义抽象方法。用于消费者和提供者之间的约定。

(2)创建一个提供者,该类需要监听消费者的请求,并按照约定返回数据。

(3)创建一个消费者,该类需要透明的调用自己不存在的方法,内部需要使用 Netty 请求提供者返回数据。

(4)开发的分析图,如下所示。

netty入门(二十七)用 Netty 实现 DubboRPC-LMLPHP

 代码示例:

04-06 01:34