最全最简单的dubbo教程-服务引入《十七》

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jingyangV587/article/details/85990523

服务引入总流程

  1. 创建client客户端,用来连接请求服务消费者。
  2. 封装invoker,里面主要包含请求的客户端,服务端地址端口,请求的类以及方法。

服务引入详细流程

  1. 在ReferenceBean->getObject()->init()中会调用createProxy()方法用来创建代理对象。
  2. 在createProxy()中会执行一个refprotocol.refer()方法,这里refprotocol同样有两个实现类,一个是RegistryProtocol,一个是DubboProtocol
  3. RegistryProtocol负责注册信息,订阅信息,构造invoker代理类,并将消费者对于的invoke缓存到注册列表中。
  4. DubboProtocol主要负责connect/getClients()连接获取客户端,等待与服务端通信

源码跟踪详解

消费者端获取代理类在ReferenceBean类中,而这个类实现类FactoryBean,这个是个工程Bean,通过getObject()方法获取代理类invoker。
在这里插入图片描述

进入get()
在这里插入图片描述

第一次ref肯定为空,进入init()

在这里插入图片描述

这里面有个重要的方法createProxy(),用来创建代理类,进入这个方法看看主要有啥:
在这里插入图片描述

这里有个refprotocol.refer()方法,用来创建invoker,同时这个接口有多个实现类包括,DubboProtocol与RegistryProtocol,我们分别在这两个类的refer()方法打上断点备用。然后我们放开断点,进入下一步:
在这里插入图片描述

如果服务没有分组的话,会走到这里执行doRefer()方法,这里是重点,我们进入这个方法:
在这里插入图片描述

如图所示,进行注册,订阅,缓存,最后会把创建好的vinoker返回出去,因为invoker肯定包含客户端相关信息,不然怎么连接服务端呢,所以在返回invoker之前会有创建客户端的操作。这时我们放开第二个断点会来到如图:
在这里插入图片描述

这里有个重要的方法,getClients(),点开这个方法:
在这里插入图片描述

要初始化一个client,点开继续往下
在这里插入图片描述

点开connect,继续:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这里又到了netty的底层了,客户端这时候就建立起来了,随时等待与服务端的连接。

这时主要的代码就执行完了,最开始那个getObjet(),就会获得一个invoker,有客户端,有服务器地址,有类以及方法。所以用客户端连接服务器,请求服务器某个类的方法,就顺利成章了!具体怎么调用的请看下一篇文章,服务的调用。
能力有限,有问题的地方求指正!

猜你喜欢

转载自blog.csdn.net/jingyangV587/article/details/85990523