RPC框架(一)——简易RPC

本文介绍了RPC的基本概念和一个简易RPC框架的实现。内容包括RPC的组件,如服务注册中心、客户端和服务端,以及客户端的动态代理实现和服务端的反射调用。此外,还详细讲解了客户端如何通过网络传输发送请求,服务端如何接收并处理请求,以及测试环节。
摘要由CSDN通过智能技术生成

RPC介绍

RPC,Remote Procedure Call 即远程过程调用,远程过程调用其实对标的是本地过程调用
在这里插入图片描述
一个RPC框架要进行使用应该要具有如下的组件(功能)
在这里插入图片描述
从整体层次来看,一个RPC协议的框架应该具有三个层面:

  • 服务的注册中心
  • 请求服务的客户端
  • 提供服务的服务端。

关于这三个层面,其实细分的话,又可以分为以下几个部分,每一部分完成各自的任务。

1.客户端(客户端发起请求,调用远程方法)

2.客户端存根(存放服务端地址信息,将客户端的请求参数数据信息打包成网络消息,再通过网络传输发送给服务端)作为一个代理类

3.网络传输 通过网络传输,把我们调用的远程接口中的参数传输给服务端,这样服务端的接口实现类才能进行处理,在处理完成之后,还要通过网络传输的方式把返回的结果发送回来。网络传输一般有原生的Soket方式,还有现在常用的Netty

4.服务端存根( 接收客户端发送过来的请求消息并进行解析,然后再调用服务端的方法进行处理)作为一个代理类

5.服务端 (提供服务的一方,有远程接口和实现类)

简易RPC实现

通用接口

Service接口:

public interface HelloService {
   
    String hello(HelloObject object);
}

传输数据的实体类(在网络传输的过程中,实体类都需要实现Serializable接口,代表可序列化):

@Data
@NoArgsConstructor
@AllArgsConstructor
public class HelloObject implements Serializable {
   
    private Integer id;
    private String message;
}

Service接口的实现类:

@Service
public class HelloServiceImpl implements HelloService {
   
    private static final Logger logger = LoggerFactory.getLogger(HelloServiceImpl.class);
    @Override
    public String hello(HelloObject object) {
   
        logger.info("接收到消息:{}", object.getMessage());
        return "这是Impl1方法";
    }
}
传输格式

RpcRequest对象:


@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class RpcRequest implements Serializable {
   

    /**
     * 请求号
     */
    private String requestId;
    /**
     * 待调用接口名称
     */
    private String interfaceName;
    /**
     * 待调用方法名称
     */
    private String methodName;
    /**
     * 调用方法的参数
     */
    private Object[] parameters;
    /**
     * 调用方法的参数类型
     */
    private Class<?>[] paramTypes;

    /**
     * 是否是心跳包
     */
    private Boolean heartBeat;

}

RpcResponse对象:

@Data
@NoArgsConstructor
public class RpcResponse<T> implements Serializable {
   

    /**
     * 响应对应的请求号
     */
    private String requestId;
    /**
     * 响应状态码
     */
    private Integer statusCode;
    /**
     * 响应状态补充信息
     */
    private String message;
    /**
     * 响应数据
     */
    private T data;

    public static <T> RpcResponse<T> success(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值