rpc的call代理对象传输信息,调用服务端,服务端代理又返回来。
代理对象。
步骤:
1.解析标签
2.代理对象
3.注册
4.路由和负载均衡
5.监控
6.封装rpc
BIO的阻塞。
----------------------------------------------------------24-------------------------------------------------------
看到这里。
1.配置层,配置文件里面解析的信息
2.服务代理出层
3.注册中心层
4.路由层,负载均衡
5.监控层
6.远程调用层,封装rpc的
6.
exchange:信息交换层管道
transport:传输层,底层就是netty
serialize:序列化层
----------------------------------------------------------25--------------------------------------------------------
如何解析配置文件的:
spring去解析标签都会有一个BeanDefinitionParser接口。
每个标签去解析的。
在构造器的前一步:
----------------------------------------------------------26--------------------------------------------------------
看这个:
服务暴露的流程:
initializingBean:https://www.jianshu.com/p/3d33b427ca56
看下这个方法:
核心:
标签内容保存起来,保存在ServiceBean中。
刷新完成:
服务暴露:
进入:之前保存的配置文件的信息。
private void doExportUrls() {
List<URL> registryURLs = loadRegistries(true);
for (ProtocolConfig protocolConfig : protocols) {
doExportUrlsFor1Protocol(protocolConfig, registryURLs);
}
}
注意这个:
看这个:通过反射得到invoker。
参数:
接口:
执行者:
再往下:开始暴露
用两个暴露一个是dubbo的一个是register的。
看下DubboProtocol
再看下RegistryProtocol
-----------------------------------
----------------------------
我们看下RegistryProtocol
这里面传进来提供者 注册中心的url地址 提供者的url
先进入这个方法:
在上面的。
这里进去到dubbo进行暴露。
进入到了
进入这个:
再往下:
总结:
启动netty服务器,监听端口。
再进入:注册提供者
看下存的是什么?
保存再注册表里面了。url和执行器。
至此服务就暴露出来了。
服务暴露的整个过程:https://blog.csdn.net/csdn_kenneth/article/details/82619828
总结:在暴露服务的时候,要获取到invoker(下图getInvoker()),再用exporter来暴露执行器。Exporter会用两个,dubboExporter和registryExporter。DubboExporter来开启netty服务器,registryExporter用来注册,服务(执行器)和对应的url地址,注册到注册表里。
总结图谱:
----------------------------------------------------------27--------------------------------------------------------
服务的引用:https://blog.csdn.net/csdn_kenneth/article/details/82619933
通过reference远程调用。
每个reference对应一个
是一个Factorybean。
getObject方法返回的对象就是。
一路跟:
这个方法:创建代理对象。
在注册中心获取远程的接口。
看下DubboProtovol:
看下RegistryProtovol:
我们看下doRefer:传的是注册中心的地址 接口类型 远程的地址
这里订阅服务。
---
再来:
可知:
核心的方法:
这个方法:
进行连接。
在注册表注册进去。
代理对象创建完成了:
可以调用远程服务。
总结图谱:
----------------------------------------------------------28--------------------------------------------------------
代理对象如何执行目标方法:
开始调用了,之前都是初始化的。
进入:
一直跟会到这里:
一步步运行,到了集群容错的invoker:
再继续跟进在注册中心找到到底有几个
在注册中心找到有两个
往下走获取到负载均衡机制:
再次进入:
按照负载均衡策略随机选中了一个invoke。
进入这个:
有filter比如监控器的信息等。
进入:
最后我们进入DubboInvoke:
客户端发起请求:
进去了netty的底层了。
----------------------------------------------------------29--------------------------------------------------------
结束。
----------------------------------------------------------30---------------------------------------------------------