Bootstrap

dubbo源码深度解读五之rpc模块

前言:rpc模块是远程调用模块,抽象各种协议,以及动态代理,只包含一对一的调用,不关心集群的管理。这个模块的学习将使我们对服务的发布和调用更加清晰。

重点学习这几个类的作用和它们的实现类:ProxyFactory、Invoker、Protocol、Exporter

1,Invoker
这是一个可执行的对象,能够根据方法,参数得到执行结果,代码如下:

public interface Invoker<T> extends Node {
   

    Class<T> getInterface();
    Result invoke(Invocation invocation) throws RpcException;

}

里面的Invocation包含了要执行的方法和参数

public interface Invocation {

    String getMethodName();

    Class<?>[] getParameterTypes();

    Object[] getArguments();

    Map<String, String> getAttachments();

    String getAttachment(String key);

    String getAttachment(String key, String defaultValue);

    Invoker<?> getInvoker();

}

看一下Invocation的实现类:RpcInvocation。简略代码如下:

public class RpcInvocation implements Invocation, Serializable {
   

    private static final long serialVersionUID = -4355285085441097045L;

    private String               methodName;

    private Class<?>[]           parameterTypes;

    private Object[]             arguments;

    private Map<String, String>  attachments;

    private transient Invoker<?> invoker;
}

其实也只是提供了Invocation所需的参数而已。我们把目光又放回Invoker。
Invoker的执行过程分为三种类型
(1)本地执行类的Invoker
(2)远程通信执行类的Invoker
(3)多个(2)的Invoker聚合成的集群版的Invoker(需要设计到负载均衡)

这里写图片描述

2,ProxyFactory
对于server端,主要负责将服务统一进行包装成一个Invoker,这些Invoker通过反射来执行具体的对象的方法。

;