一些理论
-
当你的项目太大,业务越来越多的时候,需要将服务拆分,RPC就可以用于服务于服务之间的调用问题。系统中的内部服务之间的调用用RPC。
-
RPC的架构主要包括三个部分:
- Register注册中心:将本地服务发布成远程服务,管理远程服务,提供给服务消费者使用。
- Server服务提供者:提供服务接口的定义和实现类。
- Client服务消费者:通过远程代理对象调用远程服务。
- RPC就是将以下这些步骤封装起来,使得客户端能够像调用本地服务一样调用远程的服务。
- 接收调用
- 将方法参数等封装成能够进行网络传输的消息体序列化后发送到服务端
- 将服务端处理的结果反序列化后返回给客户端。
实践
服务端代码
- 服务端在Handler部分根据传过来的RPC请求体进行解析,调用相应的方法,返回RPC相应消息体。
- 上一步的解析部分通过Spring的反射获取类名和方法名。
RPC请求消息体和RPC响应消息体
- 调用的接口全限定名
- 调用接口中的方法名
- 方法返回类型
- 方法参数类型数组
- 方法参数值数组
/**
* RPC请求体
*/
@Data
public class RpcRequestMessage extends Message{
//调用的接口全限定名
private String className;
//调用接口中的方法名
private String methodName;
//方法返回类型
private Class<?> returnType;
//方法参数类型数组
private Class[] parameterTypes;
//方法参数值数组
private Object[] parameters;
public RpcRequestMessage(int sequenceId, String className, String methodName, Class<?> returnType, Class[] parameterTypes, Object[] parameters