RPC原理以及实践

本文介绍了RPC的基本概念,详细讲解了RPC的实现难点,包括接口获取、通信方式和参数传递。接着,文章阐述了手写RPC框架的过程,包括客户端的代理类实现和服务器端的处理。提出了框架的改进方向,如使用其他序列化方式、提高通信效率,并列举了一些现有的RPC框架如Hessian、Thrift和Dubbo。
摘要由CSDN通过智能技术生成

1. 认识RPC

RPC(Remote Procedure Call)是指远程过程调用,在微服务架构中,各个微服务之间的通信一般使用RPC,比如用户微服务和订单微服务,需求是在用户微服务中查询当前用户的订单,此时用户服务是RPC的请求端,订单微服务是RPC的服务端。

2. RPC原理

2.1 要实现RPC有3个难点问题:
①如何让客户端知道服务端提供的RPC接口以及方法?
方法一:客户端和服务端在pom文件中同时依赖定义了接口的依赖,服务端需要实现这些接口,提供服务
方法二:比如Spring Cloud Feign是将请求通过动态代理加工成HTTP请求,返回时再将Response反加工过程
②客户端和服务端如何通信?
方法一:Java可以通过NIO/BIO
③客户端如何将参数传递到服务端?
将数据序列化获得二进制数据进行传输 序列化的技术也很多java默认序列化/Json/XML/Protobuf/Hessian 序列化和反序列化效率对比
在这里插入图片描述

3. 手写RPC框架

3.1 RPC Client

main线程

public static void main( String[] args )
{
   
	IOrderService orderService = null;
	RpcProxyClient rpcProxyClient = new RpcProxyClient();
    //代理类的实现
	orderService = rpcProxyClient.clientProxy(IOrderService.class,"localhost",8080);
	System.out.println(orderService.getOrderList());
}

代理类

public class RpcProxyClient {
   
    public <T>T clientProxy(final Class<T> interfaceCls, String host, int port){
   
    //为了更简洁,创建一个继承InvocationHandler的子类实现具体逻辑
        return (T)Proxy.newProxyInstance(interfaceCls.getClassLoader(), new Class<?>[]{
   interfaceCls}, new RpcInvocationHandler(host, port)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值