说在前面
前期回顾
sharding-jdbc源码解析 更新完毕
spring源码解析 更新完毕
spring-mvc源码解析 更新完毕
spring-tx源码解析 更新完毕
spring-boot源码解析 更新完毕
rocketmq源码解析 更新完毕
dubbo源码解析 更新中
sharding-sphere源码解析 计划中
netty源码解析 计划中
spring-cloud-alibaba-dubbo源码解析 计划中
github https://github.com/tianheframe
sharding-jdbc源码解析 更新完毕
rocketmq 更新完毕
dubbo源码解析 更新中
seata源码解析 更新中
spring-cloud-tianhe 更新中
mq-tianhe 计划中
rpc-tianhe 计划中
更多源码解析请关注天河聊架构微信公众号
源码解析
https://github.com/tianheframe/dubbo.git dubbo源码解析后的源码和公号文章同步更新。
进入这个方法,com.alibaba.dubbo.config.ServiceConfig#exportLocal
private void exportLocal(URL url) {
// injvm协议
if (!Constants.LOCAL_PROTOCOL.equalsIgnoreCase(url.getProtocol())) {
URL local = URL.valueOf(url.toFullString())
.setProtocol(Constants.LOCAL_PROTOCOL)
// 127.0.0.1 本地host
.setHost(LOCALHOST)
.setPort(0);
ServiceClassHolder.getInstance().pushServiceClass(getServiceClass(ref));
// 服务注册=》
Exporter<?> exporter = protocol.export(
proxyFactory.getInvoker(ref, (Class) interfaceClass, local));
exporters.add(exporter);
logger.info("Export dubbo service " + interfaceClass.getName() + " to local registry");
}
}
如果scope属性指定了injvm会走export 服务 本地服务,调用这个方法proxyFactory.getInvoker会生成一个invoker的代理类,会进入到这个方法com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper#export