dubbo injvm 协议分析
在看 injvm 协议的时候,我们还是从 InjvmProtocol 类开始看.
这是它最重要的两个方法,按照我们前面分析的内容,export 方法是启动服务,但是这个是本地服务,所以不需要启动服务.
public Exporter export(Invoker invoker) throws RpcException {
return new InjvmExporter(invoker, invoker.getUrl().getServiceKey(), exporterMap);
}
@Override
public <T> Invoker<T> protocolBindingRefer(Class<T> serviceType, URL url) throws RpcException {
return new InjvmInvoker<T>(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支持的协议
下一篇: Dubbo通信协议