1、RPC 基本介绍
RPC(Remote Procedure Call) 远程过程调用,是一个计算机通信协议,该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序无需额外地为这个交互作用编程。
两个或多个应用程序都分布在不同的服务器上,它们之间的调用都像是本地方法调用一样。
RPC 调用流程
RPC调用流程说明:
1)服务消费方(client)以本地调用方式调用服务;
2)client stub 接收到调用后负责将方法、参数等封装成能够进行网络传输的消息体
3)client stub 将消息进行编码并发送到服务端
4)server stub 收到消息后进行解码
5)sever stub 根据解码结果调用本地的服务
6)本地服务执行并将结果返回给 server stub
7)server stub 将返回导入结果进行编码并发送至消费方
8)client stub 接收消息并进行解码
9)服务消费方(client)得到结果
小结:RPC 的目标即使将 2-8 这些步骤都封装起来,用户无需关心这些细节,可以像调用本地方法一样即可完成远程服务调用。
2、自己实现 dubbo RPC(基于Netty)
dubbo 底层使用了 Netty 作为网络通信框架,要求用 Netty 实现一个简单的 RPC 框架
模仿 dubbo,消费者和提供者约定接口和协议,消费者远程调用提供者的服务,提供者返回一个字符串,消费者打印提供者返回的数据,底层网络通信使用 Nett有 4.x。
设计说明:
- 创建一个接口,定义抽象方法,用于消费者和提供者之间的约定
- 创建一个提供者,该类需要监听消费者的请求,并按照约定返回数据
- 创建一个消费者,该类需要透明地调用自己不存在的方法,内部需要使用 Netty 请求提供者返回数据
共用接口 HelloService
package com.oy.dubbo.api; public interface HelloService { String hello(String message); }