02:34
啊,当然它表表现形式上啊,和我们去调用一个本地的方法是一样的。只不过呢,就是说诶,它底层的话走的是远程,用起来的话,根本就不用考虑这些个因素啊,全部都被框框架都给我们去,呃屏蔽了这些个细节啊,都给我们已经封装起来了。哎,所以说呢,那么我们这边。呃,这是我们想达到的一个最终的效果哈,最终的目标啊,效果就是这个。
03:04
那么然后说这里边儿呢,呃,Provider common里边接口和这consumer哈,他们彼此之间呢。对,我们看一下这个费呢,会怎么设计的,这个这个这个程序啊,这个费设计完了以后我们怎么用。不涉及原理性的东西,咱们单纯的就只是看一下怎么用。哎,这个其实是其实挺简单的啊,但是这个刚学的时候呢,你会觉得哎有好几个点需要去设置一下。咱们先把这几个工程写出来。这是我们的consumer。哎,然后呢,再来一个我们他去调provider。然后呢,再来一个,还有一个common。
04:00
哎,这个common呢,就是给我们去放那个接口的。好嘞,嗯,那然后呢,下一步你看啊这个consumer。呃,Common里边呢,需要去提供这个接口。啊,这个接口呢,是在common里边去声明的。哎,这个里边public。Face生命这么一个接口啊,比如说呢,叫employ,我们这儿。我们这儿应该叫啥呢?啊对,我们是操作的employee哈,咱们。尽量一致一点,用employee。EP remote service。哎,我们老写这remote啊,远程的哎。相对于我们以前用的service,以前用的service可以在这个时候相对来来讲的话,认为是一个本地的。在这儿呢,在这个common工程里边声明这么一个接口。
05:00
这个接口里边,你就去写那个具体的方法就行了啊。然后这个接口上面呢,得注意了。它上面得写一个注解。哎,写一个注解叫做费。Client。哎,Enable啊不是就是就是注解啊,就是F这个注解这个里边呢,需要写一个微服务的名字。哎,CV的名字是什么呢?就是这个provider他的名字。它的微服名字叫硅谷provider。哎,那么我们在这个注解这。要写的就是这个名字。那当然就是说这一部分。
06:00
和这一部分它是一样的啊,我们就是用这个东西去对应provider,它的这个微服务的这个名字。然后呢,呃,这个接口里边的这个方法哈,接口里边肯定是要声明这个方法的。假设接口里边有这么一个方法。Public。返回一个string get message。Get。这样吧,返回一个影哈。你吗?白的。这边呢。个epd。这里边儿吧,这个在这儿我们说啊这个。Request这样的注解就不能省略了。还得给他拽的再大一点。
07:10
哎,这个接口里边有这么一个声明的这么一个方法。哎,那么接口里边的方法,当然它是一个抽象方法。啊,这个抽象方法。这是一个抽象方法。嗯。然后这个抽象方法哈,这里边儿有一个要求。他和provider这边呢。他provider这边。
08:00
他得有一个和这个方法呢。声明就是方法签名部分完全一样的,完全一样的一个方法。啊,然后呢,这里边儿provider这边呢,当然是带有具体实现的这个方法。同样是这个方法哈。他在这个provider里边呢,就得有具体的实现。Return啊,他这边呢,就去哪去找一个呃,Employee对象啊,比如说呢,去查一下数据库啊,他查一个EP的一个本地的service。点EP。白。啊,当然了,这里边儿是。把EPID插进来。然后他把这返回。这个是在这个provider里边,Provider里边得有这么一个方法,它的声明的部分呢,和这个是完全是一样的。声明的部分是完全是一样的,然后呢,他这个他得有具体的实现啊,这个得有具体的实现。
09:14
什么放里边?这个就得拽,拽的远一点。哎,它里边有这么一个方法,然后我们。呃。这个它叫抽象方法,我们这个呢,给它起个名字叫做具体方法。把这个往下一点。
10:04
这是一个具体的方法。但是呢,说我们你说provider这边是不是让他那个controller那个类呢,让他去实现实现这个接口吗。还呃,不需要实现这个接口。而且我们说呢,最好还别实现这个接口。呃,因为因为这一个接口呢,假设哈,这一个接口里边有十个方法哈。然后这十个方法呢,其中有有可能是分成了这么三组啊,可能哎,到这个provider这边呢,是放在三个不同的controller里边去有对应的,呃,具体的方法。啊,所以说你这个,那你说你要实现这个接口的话,你就放只能放到一个一个里边的,我就不能分开三个了。所以人家本来也没有要求去实现这个接口,只不过要求呢,这个方法的声明和你们这边方法的声明是一样的。啊,啥叫方法的声明呢,就是。
11:02
就放码头上,这这这这一段啊,就public哎,返回值方法名参数列表就这一段啊,这个是要求是一样的。所以说呢,这个就是。嗯。方法声明。要求这个一致。呃。看看这个怎么弄哈。原来在北京上课的时候。那个就上课,我在这画图,下边有个同学在跟别的同学介绍过,因为他是留级的嘛,是吧,他那个他以前就就上过我的课,完了他给别的同学介绍啊,这个老师是画线是画的最好的。我给我心里那个气呀。我,我叫画图,这不叫画像。哎,方法的声明要求一致哈。
12:04
方法的声明啊,就啥叫声明呢,就这一部分是声明。那哎。我们让他一致的最好的办法是是啥呀?哎,加过来非常好啊。就是,这就是我想要的答案。对,就是说这个。就咱们从一开始就给大家灌输这样的一个意识啊,就是这个时候你。呃,你先先写哪边都行。无所谓,先写哪边都行,你先写这边也行,先写这边也行,写完了以后呢,你从这边你就复制到另外一边,你先写到哪就复制到另外一边,你别这个说我抄一遍。你敲一遍,你再敲的话,就很有可能就敲错了,敲错了的话,这边你比如说哈这个EPID,假设你把M和P这两个字母敲反了,很容易出现这种这种问题,这个然后这个参数它就传不过去了。这个时候呢,这个错又特别的隐蔽,然后呢,你可能要是你自己去抠的话,这个事儿可能嗯,半个小时一个小时你也发现不了是这个问题。
13:08
就给自己无端的就带来很多麻烦啊。当然了,可能可能也可能是你,你经历过这样的麻烦,然后你印象就深刻了是吧。但是这个成本确实有点太高了哈。嗯。对,然后这是这是我们说这个common里边这个接口吧,它和我们provider里边一个对应的方法,他们的对应的关系哈,就是要求他们方法的声明是一致的。呃,然后呢,和这个consumer这边呢。Consumer这边是拿上我们这个接口到consumer这边呢,它直接装配就好了。啊,这边他也会有一个会也会有一个类。呃。他这个类呢,Public class一个EP,比如说这个叫。Human。
14:01
Resource哈,这只是举个例子。在这儿呢,Owa。然后呢,在这。这个remote service。把这老哥们把它装配进来就好了。首字母小写。呃,装备进来啊这个。这样我先我先把它。放到一个正确的位置。呃。我们需要把它给这个装配进来。
15:06
哎,不是,应该是这样。呃,但是光有这个还不够,光有这个还不够。这个consumer这边必须启用一下这个,呃,这个费的这个功能。这个启用呢,需要在它的这个主启动类上去加啊加加加一个注解。哎,他必须在他的主体动力上去写一下。把一个初启动类的代码去复制一下。
16:01
CTRLC。呃,在这里边呢。然后。Enable。S。啊,就是启用费这个客户端的这个功能啊,在这边必须得去加这样一个注解。我们前面前面的也也也有一些是必须加的,Enable u server那个是必须加的啊,Enable u client这个可加可不加,我们这个现在我们现在用这个版本可加可不加啊,但这个这个是必须得加的,主启动类上面一定要得加去加这么一个数据。嗯,好嘞,啊。这是主启动类哈,我们给它往上一点。
17:02
呃,有这些的话,我们这个费的话,它使用哈,这个这个用就OK了,当然说你这个你你相关的用到thing的注解的这样的地方,肯定他得去导这个thing的这个依赖啊,这个是肯定的,哎。嗯,那就是说哪个地方需要哪个地方去加就好了啊,所以在这我们看到啊,是是consumer provider和common他们这三者呢,彼此之间是有关系的。啊,彼此之间是有关系的。那我们说这个。这个接口哈,这个接口放在common里边。哎,是有意义的,因为consumer有好多。可能需要调这个。呃,我们需要调这个接口啊,通过这个接口去调这个远程的微服务的这个模块有很多啊,所以说呢。我们这些你都需要,都需要,都需要去依赖一下。都需要依赖一下common,然后呢去能够去用这个接口。
18:01
所以说你要是把这个接口呢,就放在这个consumer里边,单个的consumer看着好像比较简洁了,但是那你别的consumer也要用,你都重新去写这个代码就太重复了,所以说这个是很多模块里边,整个项目里边很多模块都会重复的东西,把它给抽取出来了,放到common里边啊。是这么一个关系。啊,所以说在这这个是我们先去说一下这个C。呃,费用的一个用法。这个仅仅只是F的这个用法。这个完全不牵扯任何的底层原理的事啊。是说我们用的时候呢,是需要去注意的。图片。你看的时候这个再放大一点看看。啊,其实你不需要去看这个细节,你理解这个他们之间的关系就好了。
我来说两句