00:00
好,前面呢我们说了一下,在我们IC容器启动加载spring配置文件的时候,那double的这些标签处理器来解析每一个的标签会封装成对应的组件,而我们这个解析service标签会将service标签的信息封装成我们这个service being,而这个service being怎么做呢?来点进来这个service being啊,它有点特殊,它呢实现了两个重要的机制,一个是实现了一个叫initial being,这是spring里边的一个接口,当我们这个组件创建完对象以后,会调用initial being里边的after proper set,在属性设置完以后会来回调这个方法,它呢还实现了另外一个接口叫application listener,就是呢,我们叫应用的监听器,这也是spring原理里边核心的一部分,当我们,但是呢,它监听的事件是。
01:00
Event比说当我们IOC容器整个刷新完成,就说IOC容器里边所有对象都创建完以后,来会来回调一个方法,回调哪个方法呢?就来回调这个on application疑问的方法,相当于呢,我们这个service b啊,会在容器在创建完对象以后,在我们这个service being创建完对象以后呢,调一个方法叫after public set,还会在IOC容器启动完成以后,哎,准备完以后呢,调用这个on application event,这都是spring里边的原理,如果不知道的同学呢,现在就来了解一下,好,那这两个方法都做了什么呢?我们来以deb的方式来运行。好,我们来放行放行。啊,包括呢,每一个标签解析来放行。好,放心呢,我们来到service after property set,他做了什么?哎,我们来看到他在这获取provider,哎,获取了一些信息,这个呢,其实就是当时我们在标签解析的时候,我们解析的每一个标签的属性值,哎,我们封装成的这个组件,如果说等于空,哎我们在这儿它就来获取到我们相应的内容,获取到相应的内容以后呢,哎,我们来看一下啊,主要的核心在下一步。
02:21
诶,它在这叫set provider,相当于把我们标签里边配的double provider这个相关的信息来,我们来保存起来,还有很多包括application的信息,我们来往下看,Set保存起来,包括呢配的model的信息set保存起来,包括我们配的注册中心的信息来set保存起来,它是呢,保存在我们当前的这个service b里边,虽然说我们每一个信息全局都有保存,然后呢,还有这个monitor,我们来看,在这呢继续保存起来,包括呢我们这个协议photos在这儿呢,保存起来,相当于把我们以前配置的信息呢都保存起来而已,那好,这一步呢就完了,我们再来下一步。
03:05
下一步呢,我们发现这呢,它又回调了on application疑问的实践,当IOC容器刷新了以后,咱们这个IC容器刷新完成,刷新完成以后呢,它在这来调一个方法,调一个什么方法呢?如果不是延迟的,而且还没暴露啊,我们呢,而且它还不是,呃,这个不暴露,哎,也就说我们既要暴露,而且它还没暴露,而且不是延迟暴露,然后呢,它就掉一个叫export,这是关键,我给这打一个断点,Export方法呢,翻译过来就是暴露服务,相当于呢来到了这一步,当service标签解析完成,最关键就是IOC容器完成以后,会触发一个事件回调,事件回调里边呢,我们会进行服务的暴露,那服务怎么暴露呢?那step into进来,进来以后呢,还是前面都是一大堆的获取信息判断,这个呢,我们就不看了,来看核心,核心呢,这有一个方法叫do export,那就是。
04:06
执行暴露,好来放行,那怎么多export呢?我们再来四代图来看多export的内容,哎,这一块又是一些判断检查判断获取信息,好我们就直接就往下翻,我们来找一些有意义的方法。好,这一块呢,也是一些检查内容,诶那么这儿呢,有一个方法是来执行逻辑的,叫do export URL,比就说呢,我们来执行暴露我们这个UR地址,相当于呢,我们接下来来到了第二我们在这要暴露服务,哎,接下来呢,我们来露这个UR地址,哎,Do export u这个暴露UR的地址,他做了些什么呢?我来step into进来,诶这个呢,走错位置了,其实我们这个还没走到我们目标方法上,我们目标方法呢,还在下边读export URL,我们之前才进到它的负方法,好,我呢就直接放行到我们这个方法再来进来,我来step into进来,来看做这个暴露做了什么,第一步加载我们这个注册中心的一些信息,相当于读取到注册中心的这个地址,哎,我们配置里边有写的好,然后呢,接下来看这有一个ports,哎,我们这个协议这个portoc。
05:22
这我们相当于要把我们当前服务,哎在20082端口来暴露,而这个暴露怎么暴露呢?如果我们要暴露在多个端口,其实呢,我们能配多个这个标签,相当于呢,我们既能用double协议,还能用其他协议都能暴露,它呢这是一个for循环,便利整个数组的,好,那我们就直接往下走,我们现在呢,其实就一个post,哎,我们是来暴露double协议的方式,它呢,调用do export urls for我们这个portoc啊,For我们这一个协议,它这一块呢,又是怎么暴露,我们来step into进来,这块进来呢,我们来注意观察我们这个zoo keepper注册中心,它什么时候呢,把服务注册到注册中心,我们也能看得见,好这一块呢,我们来看啊,前面都是一些放属性组装属性各种添加啊,啊,Primemeter,我们就直接往下放来,放到有意义的方法,哎,这些都。
06:22
不是天属性好来,直接往下走。这一块呢,也都是来填属性好往下走下走,往下走呢,我们发现呢,这一块有一些方法叫proxy factory,我们这个代理工厂啊,它要获取一些影包ER,获取我们这个执行器,然后呢,我们这个port口还要暴露我们这个这儿还有一个什么包装,一会儿走到这儿再说行,我呢就先给它打一个断点,这个方法呢,最起码不是一些啊设置值,获取值,哎,那现在呢,有功能了,包括下边,哎,其实这一段代码呢,它还写在了下边两个一模一样的,好,我们就在这也打一个断点,我呢直接来放行,看它来到哪一处放行,好我发现呢,来到这一处,这一处呢,先是利用proxy工厂,我们这个代理工厂获取到这个影worker,获取什么影worker呢,相当于我们这有一个user service employment实现对象和接口呢,是user service接口来获取到这个接口,这个对象的这个。
07:26
执行者啊,那执行者其实是什么?我们直接来放行给大家看一下,获取到的执行者其实就是把我们这个user service employment实现对象包装了一下,包括呢,把UR的地址也包装了一下,组合成了一个worker,哎,这个worker呢,我们就认为这是执行者的真正的信息,我们要执行哪个对象,哪个方法,包括它的这个UR地址是什么,我们看这个UR地址啊,它呢相当于是要给注册中心注册的这个东西啊,那这一块呢,得到了一个引播克执行器,然后呢,把这个执行器呢,在这再来一包装,哎,就是层层包装好,我们继续来放行,包装完了以后,注意在这呢会调用pro export,那在这呢,要暴露我们这个引包卡,这个影包卡该怎么暴露呢?我们先来看这个post口,点进来po口呢,它是通过这种方式得到的,哎,也就是说po。
08:26
Poco class,哎,获取我们扩展的这个类加载器,包括呢,得到它的这个适配,这个呢是基于我们Java spi机制,我们会得到这个port口接口里边我们当前要用的,我们由于是用double协议暴露的,所以说呢,我们用double的port口,包括呢我们也会把它注册到注册中心,所以说呢,我们来用regry port2个port口,哎,这一块能获取到,好我们就把它点过来,我给double port的这个方法呢。我们来打一个断点double的这个port,它呢有一个方法,我们来看一下啊,这个方法呢叫export。
09:08
往下翻,好,我们来找一下export,诶在这,因为呢,我们要调这个export方法那是调protoc code的export,而我们double export呢,我给这打了一个断点,同时呢,这个TOC,还有一个我们刚才叫这个G。我们呢,除了给这个double来打断点外,我们还给这个registry port,我来打一个断点,来,我们来同时监控上两个来往下翻。诶,这呢也有一个export,你就看一下这两个都做了什么,好,我们现在呢,Port想要export导出我们这个引播壳暴露我们这个引播壳一暴露呢,就会生成这个exportter exportter呢就会保存起来,好,那这个暴露是怎么进行的,我来放行,好,放行到第一个叫registergry porttoc,我们先来到注册中心里边来暴露,它呢会给我们传一个叫original in worker,也就说我们原生的这个执行者,这个执行者里边呢,其实就是封装了我们这个啊服务的实现,User service,以及我们这个服务的接口,以及服务的UR地址等等信息啊,都是一些封装,然后呢,看它这个第一步叫do local export来做本地的暴露。
10:30
然后呢,这是重要的一步,再来看下一步,这还有一个往下翻,有一个叫register consumer re table啊我们叫provider,就是提供者和消费者的注册表,这个注册表里边呢,会来注册我们这个提供者,所谓的注册就是把提供者传进来,那注册中心的地址,包括呢,我们提供者的URL地址,好我在这两步呢,我来打上断点,包括呢,它这也有这个注册方法,好我们来看第一步做了什么,我来step into进local,我们来暴露本地服务的时候,来往下翻,拿到我们一个exportter,当然exportter第一次是没有的,这个暴露器,然后呢,他就负责帮我们来做一个暴露器。
11:18
拿到我们这个啊,要暴露的这个执行者啊,啊,那们这个执行者呢,我们会看到啊,其实有一个regry prooc啊,我们要暴露这个还要暴露呢,我们这个真正的影worker来看我们的影worker是user service,而我们这个registry注册中心的,哎,是我们这个user service,相当于我们要给注册中心要注册一份,那它这一块呢,接下来还是调用这个port口进行暴露,那我们就直接来放行就行了,哎,这是一个啊port口里边封装port口好来放行,放行呢,实际你会发现他来到了叫double port口,比如呢,用double协议进行我们这个服务暴露,这个暴露怎么暴露呢?先拿到我们这个影播客的URL地址,诶,这个地址相当于我们要在注册中心里边要调用的这个地址,然后呢,把这个地址啊,在这儿各种转化转化,哎,包装成我们这个double的export。
12:19
块啊,又来包装成一个暴露器,然后呢,这个暴露器我来往下翻这一块都是一些属性设置,诶接下来我们看啊这个暴露器呢,它要做一件事,Double protoc,它要做一件事叫open server,打开服务器,打开服务器是怎么办呢?哎,直接在下边我们来看一下step into,我们发现打开服务器呢,先拿到UR地址,这个UR地址呢,就是我们相当于20882,我们这个服务暴露的所在端口,然后呢,我们来看它呢,在这创建一个exchange server,相当于信息交换的这个服务器,好,这个服务器呢,它一开始肯定是创不出来的,然后呢,如果是空,它就在这调用一个创建,好我们给这个方法打一个断点,Open server,包括呢,给创建服务器也打一个断点,那么来走到创建服务器,创建服务器呢,我们来往下翻。
13:17
我们会发现呢,它这儿呢,会创建一个服务器,调用这个方法的B的来绑定我们服务器,并绑定我们这个请求的这个处理器,而这个B的是怎么办呢?我就打开就行了,我把这个断点放在这,我们来打开给大家看一下,这个棒的呢,点进来绑定一个URL地址,然后呢,获取exchange我这个信息的这个交换器服务器,然后调用棒的,我再来点进来,其实这个调用呢,大家会看到是transport,那这个叫传输器再来棒,而这个传输器棒呢,你再来往前点,你看就看见了channel handle这些包括呢,这都是ne的底层了,我们再来点一个B,就已经让你选择是用哪个transport,是用ne是是呢,相当于创建一个ne的服务器来。
14:09
也就是说我们上一步创建服务器,哎,我们来到这,我们要暴露服务,创建服务器其实就是启动net服务器,监听20880端口,好,那么我们double的这个就完了,我们再来放行。放行呢,来到我们double暴露出来,相当于呢,我们net服务器在底层启动20880端口已经监听,然后呢,我们再来看它在这注册提供者么?我来step图,这个注册呢比较好玩,我们来看一下啊,它呢其实是来保存一些信息,保存什么信息呢?来看provider invo有一个叫服务提供提供者的这个执行者执行器,与此同时呢,有一个consumer in workers就是这两个属性,它相当保存了每一个UR的地址,对应的我们这个服务提供者,包括呢,对应的消费者的执行器,而执行器里边才有真正的我们这个服务的对象,就说service的实现,哎,相当于他把这个关联关系啊是维护在这的们来看一下走诶,那么这个invo呢,就会来添加我们真正的这个服务,哎,我们要暴露的地址是这个,然后呢,我们。
15:25
的真正的服务在这,哎,在这儿点开是我们这个user service的实现,也就是说呢,最终我们运行完以后,我们这个引worker就会来添加上数值,那至此那服务就暴露出来了,我们看到呢,它有啊两步,首先呢,我们这个double啊。Double它呢,会来在底层,我们这个double的portoc会来启动ne的这个服务器来监听20880端口,包括呢,我们这个还有一个叫registry,我们这个注册中心,它也会帮我们来进行注册服务,这个注册服务呢,那就是用这个注册器,哎,那这个注册器呢,我们是哪一种注册中心,然后呢,其实它就是来把注册中心的这些注册好的地址,包括呢,我们利用zoo keepper的这个客户端,我们把注册服务的地址保存在我们注册中心,我们看到这个注册中心控制台其实就已经有打印了,包括呢,将注册中心的信息我们缓存在这最重要的就是每一个URL地址的调用,会来保存它实际的这个隐窝坎执行器,那整个过程呢,就是我图画的这么一个过程,当我们再来暴露服务的时候,哎,我们要获取到这个引模壳,获取到执行器来。我们是用。
16:44
用port口来暴露我们这个执行器的,而port口呢,我们会用两个,一个是我们double的这个协议的port口,还有一个是我们registry的port口,这两个呢,都对应两个暴露,暴露者来我们这个暴露器呢,Double的port口它会来帮我们来开启服务器,而我们这个注册中心的这个export它的这个暴露器它呢会帮我呢把这些啊每一个。
17:12
服务以及它的UR地址的对应信息都保存在我们这个注册表里边,哎,这个注册表里边呢,相当于缓存了每一个URL地址对应哪个服务的执行器,执行器里边有这个真正的服务,这样做的好处是什么呢?那么前面的DOUBLE20880端口已经启动了,好,那接下来远程时要调,他说要调哪个URL地址的服务,那我怎么知道这个URL地址对应的哪个服务是什么呢?那因为把这个UR地址跟服务的这个执行器我们已经。保存在我们这个注册表里边,我们就按照UI地址对应哪个执行器,把这个执行器拿到,我们就能调用了,这是我们整个服务暴露的过程,核心的我们也看到了底层ne再来开服务器。
我来说两句