00:00
上一节课呢,我们测试将会员服务以及优惠券服务注册到了我们这个nacos注册中心中,那么接下来呢,我们就来测试他们两个之间的远程调用是否可以成功。比如我们举一个例子,我们会员呢,想要从优惠券服务中获取到当前会员领取到的所有优惠券,那他要做的是呢?我们会员服务先去注册中心中找一下,我们这个优惠券服务都在哪些机器,比如优惠券服务在多个机器都有,那么呢,注册中心给他返回优惠券服务可能在这三台机器,我们会员服务呢,就必须挑一台机器给他发送请求过去,这样呢,找优惠券服务要来我们的响应数据,那我们会员服务呢就可以使用了,所以我们必须从注册中心中获取到对方服务所在的这些机器位置,那我们就来测试一下我们这个流程是否可以走通。首先来说我们这个远程调用使用的技术呢?还是spring cloud里边的。
01:00
粪,这个粪呢,它可以做声明式的远程调用,那如果大家用过那就很方便,那如果没用过呢,按照我们的这个步骤,我们先来使用,在后边呢,我们再来说它的原理,这个份呢,它是一个声明式的HTTP客户端,也就是它给远程服务发的其实就是HTP请求,而且呢,它的使用也非常简单,比如我们的会员服务,想要调用优惠券服务,那我们呢,只需要给会员服务里边引入我们这个open份,它呢就具有了远程调用别的服务的能力,我们呢,来可以看一下我们的这个微服务,我们的会员服务里边有没有引入我们的open份,诶我们之前在创建微服务的时候,我们就让大家引了web和open份,接下来呢,他想要调用我们的优惠券服务,比如呢,我们在优惠券服务里边写一个功能,就是获取某一个会员的啊,所有优惠券我们在controller里边,诶,比如我们就在这儿写一个示例方法。
02:00
好,我们还是public返回RM,全系统的所有返回都返回这个R,那我们呢,就叫members,诶我们所有我们当前会员的所有优惠券,那我们写了一个RETURN2点,OK,我们将所有的优惠券呢,我们就放在这个cars里边。好,我们整一个list a raise as list,我们先写一个假的,给里边放一个假的优惠券就行了,诶。实体类好,假设呢,我们这个优惠券就是从数据库里边找到的。来,我们来创建一个优惠券,这个优惠券呢,我们给里边放上几个简单的东西,比如set我们这个优惠券的名字,比如满一百一百减十,好,现在呢,我们这有一个优惠券,我们就将呢这个优惠券放到我们的这个集合里边。
03:03
这一块呢,还没有这个方法,对,我们先OK,返回一个成功的结果给它里边put上我们的KY6好,我们呢,比如来发送一个请求,这个请求呢是request map来发一个呢,我们这个carbon member list,好,我们这个优惠券啊,我们这个优惠券会员的所有优惠券信息,诶我们就让他返回我们这个数据,那现在呢,我们远程服务写好了,我们就是这个卡,他能帮我们来返回当前会员的所有优惠券,那我们会员服务想要调用第一步来我们来在这儿来记录一下想要远程调用的步骤。诶想要远程,想要咱们这个远程调用别的服务,那首先呢,我们做的第一步就是要引入open粪。
04:02
引入咱们这个open份,这样呢,我们就具有远程调用别人的能力了,接下来第二个我们编写一个,因为open份是一个声明式的远程调用,所以我们编写一个接口,然后呢,这个接口就来告诉编写一个接口,告诉spring cloud,诶这个接口呢,需要调用远程服务,这个接口需要调用远程服务,那怎么编写呢?诶我们将以后将所有的远程接口我们都放在这个份包下,那这样呢,我们一看就是远程接口,比如呢,我们现在呢,有一个接口,我来写上一个咱们这个接口。就叫carbon份service,好,我们这个接口,这个接口呢,我们现在想要远程调用我们别的服务,如何远程调用非常简单,首先呢,在这个接口上来写,第一个注解叫分client,诶告诉spring cloud这个接口呢,是一个远程客户端,诶他呢要调用远程服务,调用远程哪个服务member呢,想要调用carbon刚才写的那个功能,所以呢,我们来看注册中心中,我们注册这个服务的时候用的这个服务名,我们在这一写,哎相当于我们呢要调用这个远程服务,那这个远程服务呢,由于它有很多的功能,那我们到底要调用哪个功能,所以我们可以来到这个卡里边。
05:34
Cup里边好,假设呢,刚才写的这个功能我们想要远程调用,那怎么办呢?我们只需要将这个方法的完整签名我来复制过来,给我们这个接口这一放。放在这儿,然后呢,当然这一块的路径得写全,因为我远程接口的整个地址是我们的carbon carbon member list,所以我们把这两个也复制过来放在这,好我们写上杠,那这句话的意思就是,如果我们以后调用接口的这个方法,他就会去注册中心中先找远程服务鼓励ma他们所在的位置,然后呢,再去调用这个请求对应的方法。
06:21
好,那这就是远程调用的流程,这是第一步,第二步编写一个接口,编写好接口以后呢,主要在接口里边声明接口的每一个方法,每一个方法都是调用哪个远程服务的哪个请求,诶这样呢,我们只需要把远程服务的这些请求方法直接往这一复制就行了,这是我们做的第二步,那第三步非常简单,我们必须呢开启咱们这个远程调用功能,远程调用功能那怎么开呢?我们是要使用份来调用,那需要一个注解叫enable,哎,我们开启分clients,开启我们这个份客户端的远程调用功能,那我们这个远程调用功能呢,在这里边主要有一个叫base packages,比如说我们的这种基础包,我们的所有的远程调用的这些接口,我们都放在了这个分包下。所以我们把这个包全。
07:21
类名,诶咱们这个全包名给这一复制,这样呢,我们只要这个服务一启动,就会自动扫描这个包下所有标了分L注解的这些接口,每一个接口呢,又说明了它是调用这个服务的这个请求,那所以呢,我们如果想在会员服务里边,比如我们在会员的ctrler,我们来找一个会员的ctrler来写一个测试请求吧,好,我们就在这,我想要获取到我们在这呢,我们来写一个R。Test,好,来写一个request map,我们现在呢都返回的是接层数据,好我们呢,比如就叫cups获取我们当前会员的所有优惠券,那首先呢,当前会员信息,我们可以先new一个member,哎,我们假设啊,现在本应该都是从数据库里面查的,那假设了一个会员,诶,那就是这个会员会员点,比如我们给他set一个会员的名字吧。
08:24
好,Nickname会员的这个昵称,比如叫张三,诶他的所有优惠券他要远程获取,而远程接口呢,我们刚才写了一个就叫这个carbon phone service carbon分service,把这个远程接口呢,Auto啊注入进来,好,我们来at autowa注入进来,然后呢,我们想要调用它里边的方法接口,点我们这个方法名,诶们这有一个方法,它呢直接把我们返回R这个数据,所以呢,我们可以将整个这个R先返回,我先来return我们的这个r.OK。
09:02
点我们put上两个第一个我当前会员是什么?诶我们当前会员呢,是我们的这个member,以及它的优惠券是什么,我们继续往前put它的我们获取到的所有的优惠券,所有的优惠券,诶我们从这个远程结果里边,远程结果里边我们来获取一下,因为我们远程返回的这个东西,我们看我们远程接口。我们将所有的优惠券呢,都放在了R里边的这个集合里边,我们来看,诶我们给R里边是放了一个叫cups,而这个R的这个put方法,它其其实呢,就是给map里边放个k value,整个R呢,其实就是一个map,所以呢,我们从这个R里边获取到我们刚才放的cups。好远程服务呢,相当于会放一个这个,然后呢,那相当于我们最终的优惠券内容,那就是在这诶。
10:06
这样呢,我们会看到我们最终响应的结果,里边第一个结果这是我们本地查询到的,比如一个张三,第二个结果呢,这是调用远程服务查询到的,那我们就可以来测试一下这个是否成功,好我们现在呢,重新启动我们这两个服务,会员服务,以及咱们优惠券服务,我们会员服务呢,如果发送member member companiess请求,它呢会调用一个接口。The member comps方法,而这个方法呢,它是一个份clean,它的意思就是这是一个,这是一个声明式的远程调用,远程调用,所以呢,只要我们调用这个接口的这个方法,他就会找远程的古力ma卡粉服务给他的这个请求来发咱们这个请求。
11:00
然后呢,我们将响应到的结果重新解析出来,要我要到我们自己的数据,比如我们想要远程的这个cars内容,那么最终整体返回,好我们来测试一下,测试呢,我们给member发请求,好MEMBER8000端口,那发什么请求呢?我们发member member cars这个请求呢,会远程的先来获取到我们的S,我们回车我们看一下效果,诶我们发现呢,Success已经成功了,我们的这个卡这是从远程获取到的,诶满100减多少,我们当前的会员是张三也都没问题,那么我们这个远程调用我们就测试通过了,因为远程调用的整个过程,它的第一步就是先要去我们的注册中心里边得知道我们这个服务所在的位置,那假设如果我们这个服务没上线。那我们看一下这个远程调用能否成功,我们呢将我们这个卡这个停掉,那现在来看卡服务呢,现在是上线的,假设呢,由于各种原因卡服务掉线了,掉线了呢,我们同我们在注册中心中,我们刷新一下,我稍等看一下。
12:16
如果我们这个卡服务器呢,一掉线以后。我们再来远程获取。来我们看一下这个注册中心中稍微慢一点。好,我们来刷新,诶在这一块健康实例数已经没有了,那我们想要这次远程调用来看一下结果。哎,我们在这儿呢,就会出现一个异常叫connect timeout,我们连接超时,我们去来执行远程的这个卡请求member list已经超时了,因为我们这个服务掉线了,我们服务呢,只要重新上线。重新上线,首先呢,在注册中心中会有,只要在注册中心中有了,那我们这个远程调用才能成功,诶我们稍等,刚才刷新的时候呢,那个掉线的服务已经被剔除了,等他上线现在又会上来,我们稍等一下,诶我们多刷几次。
13:08
诶现呢这个服务又上来了,我们重新在这儿再再一次调用测试走,诶这个测试呢,我们得稍等一下,他现在呢说还没有可用的服务上线,诶这个上来呢,还得有一段缓冲时间啊,稍等一下。好,我们现在呢刷新,诶我们发现呢,这个服务又成功了,我们远程获取到的优惠券在这儿满100减多少,当前的会员是张三,诶我们这个远程调用就成功了,远程调用呢,我们主要是使用份来进行调用份的使用步骤呢,我们刚才给大家也总结了,首先导入我们粪的这个依赖包。然后呢,再来编写我们这个远程调用接口,你想要调哪个方法,很简单,把远程接口的那个方法完整的签名给我们接口这一复制粘贴就行了,把这个路径写对就行了,包括它有参数也是给这把参数整个都复制粘贴过来,然后呢,我们接下来只要开启我们远程调用的功能,诶我们这个spring cloud phone就会呢扫描这些远程接口,只要呢,你调接口的这个方法就会自动的给远程这个服务来发送请求,但前提是所有的服务都必须上线。
我来说两句