欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

dubbo injvm 协议分析

程序员文章站 2022-07-15 15:54:43
...

在看 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 injvm