dubbo injvm 协议分析

在看 injvm 协议的时候,我们还是从 InjvmProtocol 类开始看.

这是它最重要的两个方法,按照我们前面分析的内容,export 方法是启动服务,但是这个是本地服务,所以不需要启动服务.
public Exporter export(Invoker invoker) throws RpcException {
return new InjvmExporter(invoker, invoker.getUrl().getServiceKey(), exporterMap);
}

@Override
public  Invoker protocolBindingRefer(Class serviceType, URL url) throws RpcException {
    return new InjvmInvoker(serviceType, url, url.getServiceKey(), exporterMap);
}

其实仔细的对比下其他协议的实现,发现讨论都是一个套路.

一般来说,都会在 Invoker 类的 doInvoker 方法中发起一次调用,要么是通过网络,要么是直接调用.

public Result doInvoke(Invocation invocation) throws Throwable {
Exporter exporter = InjvmProtocol.getExporter(exporterMap, getUrl());
if (exporter == null) {
throw new RpcException(“Service [” + key + “] not found.”);
}
RpcContext.getContext().setRemoteAddress(LOCALHOST_VALUE, 0);
return exporter.getInvoker().invoke(invocation);
}

然后就没有啥了,直接调用实现类的方法了.

你可能感兴趣的:(dubbo)