00:00
好,前面呢,我们说了一下引用服务的流程,那么这个引用服务呢,最终会给为我们创建出一个代理对象,那这个代理对象如何进行方法调用,我们给这打一个断点来测试一下,右键呢,我们以八个模式进行运行。整个调用过程呢,包括double的官方文档里边也有一个,这有一个我们整个调用链的图,那从下边来看,从我们这个代理对象呢,会调到filterer等等,我们来实际以debug为准,好,那们现在呢,进入到我们这个调用方法,我们看到这个user service确实是一个代理对象,而这个代理对象呢,是层层封装了各种影ER,哎,我们来看一下这呢,还有这个影ER,影ER里边是我们真正要执行的一些功能方法啊,那我们怎么执行呢?来step into进来,进来以后呢,们拿到要执行的这些方法信息,包括呢,我们的参数的类型信息等等,然括呢,我们来往下看,下边呢有一个叫invoer.invo然而呢,我们说这个invoer啊,它里边呢,本身就是层层封装的结果,我来放行,然后我再来step into,那在into之前呢,我们会看到它要work。
01:19
行,它会把我们这个方法以及参数啊,封装成一个叫RPC的这个执行一个远程调用的对象,好我们来带into就行了,好它进来封装好再来step into,现在呢,我们在这来work,怎么work呢?我们首先得到是这个最外层的Mo closester in work,好来往进走来in work的时候呢,来我们又是in worker.work我们这里边又封装了for over closester in work,这些closester in work呢,哎,它其实就是我们这个集群容错的这个in work,哎,我们说这个集群容错啊,当我们出现失败以后,这是一个能失败重试,我重试到其他服务器,好我们继续来执行,执行里边呢,这个e work里边呢,还会有我们来往下走,往下走呢,我们会来看啊,你在in work执行的时候,我们这个啊集群来执行的时候呢,我们会发现这有一个方法叫。
02:19
List,这个list的作用呢,就是把我们想要执行的这个方法,我们呢,在注册中心我们来找到,我们到底有几个影播客能来执行,我们来让他找一找呢,我们发现有两个,怎么有两个呢?其实就是我们这个方法,我来往下翻,一个是我们上一次的2.0版本,还有一个呢,是我们再来往下翻,是我们这个1.0版本,所以呢,我们相当于找到两个能执行的方法,找到了以后呢,然后接下来我们来获取到负载均衡机制,好这个负载负载均衡机制我们就给它放行,获取到相当于我们配置到默认的负载均衡机制,获取到以后呢,接下来它继续在这读引work,好,我们继续进来,来,我们进入层层引work里边,好我们如何引work呢?我来step into,哎,我们就来step over来进入进入。
03:15
们来看一下,在这呢,我们来看负载均衡,拿到以后呢,这还有一个叫select,能根据我们负载均衡策略,我们现在默认就是re动按照权重进行负载,而我们影波克呢有两个,然后呢,它随机选择一个影波克来往下走,来按照我们这个负载均衡策略呢,它只选中了一个引worker,我们来看一下,它呢相当是执行2.0版本的这个啊方法,我们get user service的这个什么address这个方法,好,那我们现在呢,得到了一个引worker,那怎么执行呢?这都是一些保存信息,好来往下翻,接下来呢,有一个叫引worker点引,那我们继续执行,哎,引ER呢,里边又封装了来看啊引里边呢还有一些filter,我们真正要执行功能的时候呢,它为我们封装了一些filter,我们这个filter啊,有我们在最一开始我们代理对象里边,我们要用的。
04:16
时候可以来封装飞塔,比如我们要做这个缓存功能,我们来看一下,那这一块呢,有一个示例,示例里边呢,有一个结果缓存,如果我们想把这个结果缓存,哎,我们配上catch l ru,怎么做这个缓存功能呢?相当于就是给我们这个代理对象加一个filter,如果你还来想做缓存,还来想做我们这个啊Mo,这个Mo呢,就是我们这个功能来往下翻,这有一个叫本地伪装,哎,如果你还想做这个功能,我们有相关的filter介入,但是呢,我们都没配这两个功能,所以说我们一开始就来到了这个引播克,引波克,我们选中了负载均衡以后,接下来呢,又是进入了filter特的环节,Filter呢就是各个统计信息,比如我们啊监控中心要统计一些信息,包括呢,我们这些count各种统计,那呢,我们进入各种filter的环节,这个引播课里边明显看到这有。
05:16
这个菲,包括这个菲特里边呢,那还继续有封装,哎,In沃克里边,那哎封装了double in沃ER,还有其他的菲特,菲特里呢,又有其他的菲菲里边又有这个in沃,In沃里边相当于最终啊,那真正的目标方法把所有的菲都解除以后,就叫这个double in worker,我们来进行远程调用的,好,我们就来一步一步进入就行了,我们来进入好,来到一个filter port filter,我们也不用管它是做什么,那接下来继续来进入。那么在这呢,又要引播克执行我再来进入啊,还是我们这个filter来进入,进入以后呢,我们在这引播克又要执行我再来进入,哎,是刚才呢那个future filter,然后呢又回来再来进入,然后呢又来到monitor的filter,相当于呢,我们各种filter层层过滤好,然后呢,我们在这继续执行,继续执行好我们来进入,那我们接接下来呢,来到我们这个抽象的这个引播ER里边,好,我们在这,哎。
06:25
找一下我们来继续要执行方法,好doing work,我们继续执行,执行呢,我们最终来到double worker,好我们给他打一个断点,他呢才是真正要我们为我们执行功能的,好来看要执行哪个方法呢,他拿到这些方法的信息,哎,注意接下来呢,他会拿到我们这个客户端,客户端呢,在我们服务引用的时候暴露过一次,那么这个客户端呢,相当于保存了啊,我们要连上哪个服,哎,那当前呢,要连上二零。882相当于连上这个服务器,然后呢,我们找到这个客户端以后,我们接下来往下翻,然后呢,我们会发现呢,这有一个,诶我们往下走,客户端点request,相当于呢,我们这个客户端发起请求,发起请求以后呢,把请求的结果获取来,然后返回这一块呢,相当于就来到我们底层的调用了,我们已经来到了这个客户端了,客户端呢,我们要进行调用,那就要进行底层的通信来发请求呢,我们也可以step into进去看一下,也就是拿到我们这个客户端,好,我们来发送请求进来,拿到我们这个通道发送请求进来,哎,我们这个发请求呢在这。
07:44
模拟出一个请求对象。然后呢,给我们通道发送出去,所以这就是已经是底层的这个请求发送方法了,好发送完了以后呢,有一个返回,返回完了以后呢,Get得到我们这个最终啊请求的这个结果,包括呢,我们这儿还有一个超时属性,如果方法执行超时,哎我们呢就会报错,但是呢,我们现在来看一下啊,确实超时了,那超时了我们再来放行,放行呢,它有第二次重试,哎,第二次重试换一个机器再试,好我们来step进来,进来呢还是连我们这个客户端,那这个客户端呢,我们来看一下啊,刚才20882超时了,那现在呢,是不是换了一台机器,好,我们换到这个20882,现在呢,我们来看一下这一次调用行不行。
08:37
好,那还是在这来发送请求,我就直接给他放行,哎放行呢,发现没有出错,那我们直接就出来了,出来in work,好,我们拿到了这个响应结果,响应结果呢,我们来看一下,在这个响应结果里边response,哎,Result里边封装了我们远程调用的两个返回的结果对象,好拿到这个结果对象以后呢,把这个封装一下,然后再来返回,返回,哎,整个呢,我们double那个in work1执行完以后,把我们整个结果,哎,它这还有抵扣的,来进行各种解码,编解码,然后呢来返回,返回完了以后呢,我们整个相当于就调用完了,调用完了我们这个控制台就要打印。
09:24
好,慢慢让它执行完,我发现呢,控制台在这呢,确实打印出了我们的功能,所以这是我们整个远程的调用步骤,调用步骤呢,主要就是我们这张原理图,来我们的代理对象如果有要做其他功能,用filter介入,否则没有的话呢,我们用这个close close呢其实是来封装多个引波壳的,如果有多个引波壳的情况下,我还能选一种负载均衡机制,而且刚才我们调用错了,还会有重试,我们这个负载均衡在调用期间呢,来我们还有其他的filter来介入,统计一些信息数据,当然最终我们真正执行功能的啊,由于我们是用double协议来远程调用,所以说是double模帮我们来进行调用,而调用的底层是我们client client发送请求,这个client client呢,在它的底层就是用我们这个媒的客户端连接我们我们目标端口的这个服务器来发送请求,服务器请求收到数据。
10:25
以后呢,我们就啊,收到数据以后,我们就要解码来整个返回,把我们整个返回数据呢,再来交由代理对象交给我们,所以呢,这时候我们整个的调用完成这个好,我们就给他放心,那么至此呢,我们把服务暴露的整个流程,包括服务引用的流程,我们这个代理对象调用的整个流程,我们都大概的走了一遍,当然里边的一些我绕过的核心细节,哎,大家有兴趣的同学呢,在里边慢慢来看一看,而我们把每一个这个。断点呢,我也给大家导出来了,大家如果想在调试期间啊,如果你没有这个断点,你可以把我导出的这个断点import导入进来,比如你想来测我们这个啊,服务的这个执行把这个断点导入。
11:14
好,导入了以后呢,就相当于帮你打好断点了,你就在这来给bug来测试就行啊,包括呢,每一个整个调用的图也给大家导出来,那么希望大家呢,在下边把这个源码多走几遍,理解一下大部的整个流程,整个核心流程呢,无外乎就是层层包装,最终呢,底层用net来进行通信。
我来说两句