easy dubbo--rpc框架实现思路

dubbo,作为一个成熟、易用、多支持的远程方法调用框架,应用广泛。为了透彻理解dubbo,我们今天来实现一把自己的dubbo。

为了实现dubbo,我们需要做哪些事情呢?

  1. 远程,必然涉及到网络通信,这个我们用成熟的netty框架来做
  2. 方法调用转为网络请求,客户端的方法调用,我们可以通过aop将行为转为网络请求。
    那么,我们的网络请求要做哪些事情呢?我们要调用远程方法,这就意味着服务端需要知道调用的类、方法以及方法参数值。
    所以我们封装了一个远程调用信息类来进行交互:RpcInfo(还有表示返回结果的result、success、exception等属性),在进行网络通信时,数据通过Kryo的方式序列化(因为它占用空间少、速度快,但是它要求序列化的类必须有无参的构造方法)
  3. 方法调用与响应结果反馈是不同的线程,如何拿到返回结果数据。
    这里需要一个通讯机制,本项目采用简单的方式,应用中维护一个map,在发送前,生成id作为key,然后将调用信息对象放入到map中,接着通过该调用信息对象wait,阻塞。在调用结果返回时,调用的线程就会被唤醒,根据最新的返回结果来给方法调用者反馈。

代码详见:https://github.com/guzhangyu/practice-Code/tree/master/src/main/java/com/phei/netty/rpc

猜你喜欢

转载自blog.csdn.net/guzhangyu12345/article/details/79889814