dubbo 学习总结之RPC

版权声明:本文为博主原创文章,博未经主网求允许不得转载。https://blog.csdn.net/xiao_longhua/article/details/90580964

一、RPC 工作原理

      就是客户端上运行的程序在调用对象方法时,底层将针对该方法的调用转换为TCP/HTTP请求,发送到远端服务器,远端服务器监听固定端口,收到这个TCP/HTTP请求后会解析出相关信息,包括客户端想要调用哪个类的哪个方法,参数是什么等,然后进行对应的调用,将调用结果再通过数据包发回即可。RPC中一般会有一些“契约”的概念,即客户端和服务端双方约定好的接口,表明服务端实现了哪些接口,客户端可以使用这些接口。下面以一个我实现的简单的RPC框架为例说明。

二、动态代理在RPC 中的用法

PS:java 动态代理详解

  1.创建服务端接口IMyProxyServer.java,创建方法method1method2

public interface IMyProxyService {

    void method1();

    void method2();
}

2.创建实现接口方法的Class MyProxyServiceImpl.java文件

public class MyProxyServiceImpl implements  IMyProxyService {
    @Override
    public void method1() {
        System.out.println("method1:"+1);
    }

    @Override
    public void method2() {
        System.out.println("method2:"+2);

    }
}

3.创建个Demo类TestProxy.java,来实现代理

public class TestProxy {
    public static void main(String[] args) {
        //创建实例
        final  IMyProxyService obj = new MyProxyServiceImpl();
        //创建代理对象
        IMyProxyService proxy= (IMyProxyService) Proxy.newProxyInstance(
                TestProxy.class.getClassLoader(),
                obj.getClass().getInterfaces(),
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
                        if(method.getName().equals("method1"))
                        {
                            System.out.println("TestProxy method1");
                            return null;
                        }else{
                            method.invoke(obj,objects);
                        }
                        return null;
                    }
                });





        //执行方法
        proxy.method1();
        proxy.method2();


    }
}

4.打印结果:


 从结果可以看出:

(1)通过收到的客户端请求知道调用哪个类,从配置文件中读取该类的全限定名加载到JVM,反射出该类实例;

(2)通过反射出来的实例进行方法调用;

(3)通过main函数返回调用结果;

三、RPC 调用分类
    RPC 调用分以下两种:

   1. 同步调用
       客户方等待调用执行完成并返回结果。
   2. 异步调用
       客户方调用后不用等待执行结果返回,但依然可以通过回调通知等方式获取返回结果。
      若客户方不关心调用返回结果,则变成单向异步调用,单向调用不用返回结果。
      异步和同步的区分在于是否等待服务端执行完成并返回结果。
 

四、RPC 结构拆解

 

RPC 服务方通过 RpcServer 去导出(export)远程接口方法,而客户方通过 RpcClient 去引入(import)远程接口方法。客户方像调用本地方法一样去调用远程接口方法,RPC 框架提供接口的代理实现,实际的调用将委托给代理RpcProxy 。代理封装调用信息并将调用转交给RpcInvoker 去实际执行。在客户端的RpcInvoker 通过连接器RpcConnector 去维持与服务端的通道RpcChannel,并使用RpcProtocol 执行协议编码(encode)并将编码后的请求消息通过通道发送给服务方。

RPC 服务端接收器 RpcAcceptor 接收客户端的调用请求,同样使用RpcProtocol 执行协议解码(decode)。解码后的调用信息传递给RpcProcessor 去控制处理调用过程,最后再委托调用给RpcInvoker 去实际执行并返回调用结果。

 五、总结

RPC 在dubbo/dubbox 中占据重要位置,只有理解其内在原理,才能更好的运用。。
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值