腾一部分笔记到csdn
1. 概述
Dubbo 服务引用,和 Dubbo 服务暴露一样,也有两种方式:
|
// 推荐
<dubbo:reference scope="local" />
// 不推荐使用,准备废弃
<dubbo:reference injvm="true" />
<dubbo:reference scope="remote" />
|
2. createProxy
本地引用服务的顺序图如下:
在 4* - API 配置(三)之服务消费者 一文中,我们看到 ReferenceConfig#init() 方法中,会在配置初始化完成后,调用 #createProxy(map) 方法生成对象。本地引用时
invoker = refprotocol.refer(interfaceClass, url); //获取invoker,从这句开始分析
|
invoker = refprotocol.refer(interfaceClass, url); //获取invoker
-> return new InjvmInvoker<T>(serviceType, url, url.getServiceKey(), exporterMap);
@Override
public Result doInvoke(Invocation invocation) throws Throwable {
// 获得 Exporter 对象
Exporter<?> exporter= InjvmProtocol.getExporter(exporterMap, getUrl());
if (exporter == null) {
throw new RpcException("Service ["+ key + "] not found.");
}
// 设置服务提供者地址为本地
RpcContext.getContext().setRemoteAddress(NetUtils.LOCALHOST, 0);
// 调用
return exporter.getInvoker().invoke(invocation);
}
//Invoker这个invoker就是暴露时创建的 Invoker里面包类似springmvc的Wapper
|