sgg---dubbo-原理

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---------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值