00:00
好,前面呢,我们看了一下服务暴露的整个过程,那么接下来呢,来说一下服务引用的过程,我们如何通过配置reference标签来远程引用我们刚才暴露的服务前置的流程呢?跟服务暴露还是一样,每一个标签呢对应一个解析类,而我们这个reference标签呢,它就对应的是reference being,这个being呢有一个特殊之处,它是一个factory being factor being呢就是spring的工厂being工厂being也就是说当我们要获取我们这个reference标签里边的这个组件,也就是user service来看,那这会自动注入user service,自动注入user service呢,是不是就得从容器中找,容器中怎么找呢?因为它是一个工厂B应,那我们这个reference being呢,就会调用工厂being应的get object方法,那给这个方法呢,打一个断点,它返回的对象就会作为我们这个。
01:01
标签配置返回的对象,好,我们接下来呢,以debug的模式来启动起来。启动起来呢,我们接下来第一步就会先来到我们这个get方法,因为我们这个autowa这一块,我们想要获取user service,获取user service呢,调用工厂必应的get object获取,然后这个get方法呢,我们来step into进来,它呢这有一段判断destroy是否销毁了等等,但是呢,接下来下边如果说ref,我们这个引用是空的,然后呢,我们就给它来初始化,我们给这个初始化这打了一个断点,放行到这好step图来看一下初始化是什么样的一个流程,来往下翻,初始化呢,前边也都是一些信息检查,信息检查啊,我们这些检查包括一些获取属性,我们就让他检查,主要呢来到下边。来到下边呢,我们来看下边呢,我们会有一个方法一直往下翻。
02:02
这呢,会有一个叫create proxy创建代理对象,就说呢,在前面检查一大堆属性,设置一堆以后来放行,创建什么代理对象呢?这有一个map map里边啊写了好多的属性,就是呢,我们注册中心的地址是什么,我们想要调这个方法啊,包括呢想要调这个接口,相当于是呢,创建这些信息来给我们的代理对象,这个代理对象怎么创建呢?我再来step into进来。在创建代理对象呢,先来搞一个URL地址好,这些呢,前期都是一些属性来直接往下放,往下放。这设置呢,我们就不看了,主要来看这有一个呢叫reference porttoc,也就说呢,我们这个引用的协议要来远程引用,这有一个接口是user inter user service,我要引远程引用这个接口我来放行到这,那它远程怎么引用?首先urs里边保存了注册中心的地址,相当于呢,从注册中心要来获取这个远程接口,这个的获取怎么获取呢?我来带图重新进来,好,我们先把这个返回,再step into,当然大家注意啊,这个呢还是一个portoc,按照我们以前呢,这是SP的加载方式斯呢啊,不好看,那么这个呢,我们还是主要核心两个,一个是double,由于呢,我们是用double的协议来进行调用的,所以呢,我们来看double的reference方法,Re,来找一下reference。
03:40
好,我们来往下翻来看一下,有一个这是import export我们来导出的,来我们来下边呢,还有一个我们引用的方法。哎,Refer,好,那们给这个double的refer方法来打一个断点,同样呢,我们这个里边control。
04:01
Control shift加T,我来这个po里边呢,我们再来打开我们这个注册中心的这个啊,Refer。来搜索一下这个refer方法,好相当于呢,这有两个refer方法,我们在这呢暴露之前,好,我们用这个port来要调用refer,调用refer呢,我就直接来放行到每一个port口,看它怎么来进行远程引用,好放行,那么呢,先来到注册中心的这个方法,哎,它来引用,它怎么引用呢?还是一样先得到注册,根据我们这个注册中心地址,得到我们这个注册中心的这些信息。来,我们来让他走下一步,相当于呢,我们获取到了注册中心的一些信息,好获取到以后呢,接下来我们来往下走,往下走呢,我们来这一块呢,还是来获取一些什么query string查询字符串,相当于注册中心里边的我们要调某一个服务带的这些参数,好把这些呢它都获取,获取完呢,大家注意啊。
05:05
我们往下走呢,这有一个do refer,注册中心的这个do refer想要做远程引用,它来做什么呢?哎,它我们呢会传入几个东西,一个是注册中心的地址,还我们远程要引用的叫user service,以及我们这个注册中心的UR的地址,但是我们注册中心是要的这个方法干什么的,我们来step into,好我们发现呢,他在这儿,哎帮我们来创建一些东西,这些创建呢,我们就直接都放过,我们来主要往下看,诶这呢有一个方法叫directory,也就是说呢,我们开始去注册中心来订阅,订阅什么服务呢,就来订阅我们服务提供者为我们提供的这些服务,好我们直接来放行,那这一步呢,相当于就是来订阅服务了,来这直接给它放行,那么订阅服务的同时呢,会来到我们double的po口里边,Double的port口呢,去来执行我们这个远程引用,执行远程引。
06:06
的核心也有一个叫get clients叫获取客户端,也就是说大想要远程引用谁程引用user service user service在哪?哎,这我们刚从注册中心里边订阅到user service的这个地址,然后呢,包括我们这个worker,我们这个执行者是什么,现在是空的,我们要获取客户端,然后呢,最终返回我们真正的这个执行者,核心呢,在这个获取客户端,我们来看一下,当double pro啊,Double这个prooc来远程引用的时候,获取客户端是做什么来打开,打开呢我们来往下翻就行了,我们发现呢,它是帮我们来创建一个这个客户端,而且呢是根据连接数,我们有多条,还可以创建多个,然后呢,这还有一个叫获取我们共享的客户端,拿到我们这个URL地址,拿到UR地址,我们再来往下翻,它这一块呢,会有一个叫初始化客户端,行了,我们给这打一。
07:06
个断点,我呢直接点进去,初始化客户端是干什么呢?我们来看啊,还是获取到UR地址,行,我们就直接放行到这吧,好,初始化客户端我来step into,获取到我们这个UR地址,相当于我们搭协议,要远程调用20882这个端口,然后呢,我们来往下看,诶在这呢,有一个叫exchange connect,比如说我们要进行连接,连接是什么呢?来点进来把这个连接方法呢,我们也打一个断点,然后呢,我们会看到用exchange进行connect连接,好,我们直接放行到这吧,那这个连接又是什么?我们这一块的代码其实大家已经建了很多了,我们在服务暴露的时候都这样来把这个connect打开,发现呢,它在这连接调用transport connect,就是我们这个传输器连接,传输器连接呢,我们再来往下翻,哎看呢,拿到这个传输器连接这个连接其实。
08:06
到达了net的底层,相当于是呢,我们创建一个net的客户端,来我们这个UR的地址来监听一个。端口也就说呢,我们相当于创建出这个连接,然后创建出来了以后呢,来我们把这个影播客就会返回过来啊,包装好的影卧克由我们这个客户端的这个连接属性,哎,这些连接属性呢,都在这儿放着,然后呢,我们把这个影卧克返回。整个in worker相当于我们,我们调用politicaloc reference在这包装包装包装一堆以后,会为我们返回这个引窝ER,好,我们直接来让它返回。好,这些呢,我们都来给他放行,放行来让它返回我们这个窝坎。好,这个订阅完成,好,我们来看啊,注册中心的这个影模块,我们就返回了这个影模块呢,相当于封装了我们真正的目标的这个影模块地址啊,都在这放着,这有我们的目标的调用的地址,包括呢,我们这些配置啊,我们下边的这个啊,消费者的这些地址,相当于我们影播客里边呢,知道他要调谁,然后接下来又是大家熟悉的一步,给我们这个提供者和消费者的注册表里边,把我们这个影播科注册进去,注册成是UR地址呢,就是我们这个,哎,订阅的UR地址相当于我们消费者,哎。
09:39
来消费哪个服务,把这个注册进去,那这个注册进去相当于我们这个注册表里边,那我们提供者UR的地址对应的是什么,消费者UR地址对应哪个代理啊,保存的都是他的代理对象,也就是这个影播客,也就是说每一个呢,相当于都保存好了。
10:01
那保存好了以后呢,我们接下来好,我们这个引模块返回,我们接下来do执行完,执行完了以后呢,完全返回。好,我们给它全部返回。全部返回,返回以后呢,我们这个create progress,我们创建对象就完成了,那这个对象里边其实就是封装了这些in worker,就说我们要调用远程服务来,我们用一个引worker封装了远程服务的这些调用信息,包括我们这个引worker的代理对象,这个代理对象我们创建好以后呢,而且我们都存储起来了,相当于我们这个引用呢,就有一个代理对象,那接下来我们如何执行方法的,相当于就是代理对象来调用方法,那下一节课呢,就来研究一下我们代理对象到底是怎么执行我们目标方法的。整个流程呢,总结给大家就是我们这个图,哎,我们reference being应是这是我们远程引用服务的这个being应,它呢是一个工厂B应,所以说呢,在获取这个引用对象的时候,会要调用工厂的get object,然后呢我们来get初始化,主要呢来创建对象,所以的创建对象就是我们这个port来引用远程服务,怎么引呢?我们以两个port口,一个是double port和register port double这个port口呢,就负责跟远程的这个啊20880这些端口服务器,我们来进去连接创建一个客户端,而他呢,就负责从注册中心订阅出服务,并且呢,把我们这些影播客向他创建的这些客户端信息,影播客信息我们都来保存到我们这个注册表中,然后呢,整个影worker封装好了,我们来返回,整个返回,当我影worker的这个代理对象创建完了以后呢,我们来返回,那相当于远程。
11:56
引用的这个service就是我们返回的代理对象,核心就是代理对象里边有跟远程能建起连接的客户端也有呢,我们远程的这些服务的每一个URL地址信息都有,那我们如何远程调用服务,后来肯定是我们客户端跟服务器建起连接,然后呢再来调服务,那我们后来呢,来看一下远程调服务的过程。
我来说两句