00:00
接下来我们继续来调试商品上架的细节功能,那前面呢,我们上架了一个11号商品,那如果上架成功,这一块的状态呢,应该是上架状态,但我们现在再来查询的时候呢,当然这一块状态还是新建状态,那说明我们这个上架呢,还有一些细节问题没处理,那这样呢,我就先给我们的远程服务,我打几个断点,我们在这一块远程来调用库存,然后呢,我们再来远程ES保存数据,那么之前呢,在这测试远程保存的时候,我们去ES里边检索数据呢,是有的,那说明保存成功了,但是修改状态呢,我们是在这一步来修改状态。那说明成功的这一块状态码返回到不是零,那还有点问题。那我呢,就给这几处打上断点,把其他的断点我们全部关掉,我们来点开断点,把不是po info的,特别是远程服务的断点呢,我们先移除掉,我们调试过程中再有什么问题了来看,好现在呢,我们留下这几个断点,我们现在来重新上架,比如我来上架我们的13号商品,来点击上架,来到我们的debug调试,我们现在要上架13号商品,好我直接放行来到下一步,这一步呢,他先去来查询我们的库存,好我们直接走,那发现呢,这一块抛了一个异常,异常呢是我们读取超时的异常,我们说这个服务啊,你第一次刚一启动,我们发的第一个请求经常会超时,因为服务的一些线程池、数据库、连接池等都还没有创建好。
01:31
第一次请求还要初始化这些东西,那么这个呢先留在这儿,那么商品呢,先来调用远程的库存服务有异常了,但是呢,我们直接放行,我们来给ES来发送数据,走们给ES呢,要求让他上架,我们来运行方法调用完了以后呢,们返回了一个R,这个R呢,我们看一下这个扣的它的扣德码是11000,它说商品上架是异常的,那异常的话我们通过扣德码判断,那我们没办法来修改状态,所以导致呢状态没有修改好,但我们来实际查一下,那商品呢有没有上架成功,我们再来搜索一遍走。
02:08
那么现在来看搜索的商品,我们现在有26个了,原来上架呢只有八个,我们现在PU是13号的商品。来看一下有没有呢?我们一直往下边翻来找一个SKU是我们找到了s puu是13号的,说明我们这个iPhone也是上架成功的,那只是我们这一块的状态码返回有问题,那来到我们的检索服务,好,我们来找到我们的以前检索CTRL了,Elastic save ctrler它在这呢来进行检索,检索呢会给我们返回BB这一块呢,是来根据我们之前的这些上架成功失败来返回的么?这个B呢,主要是这个B汉字fes,那它来判断是不是有错误,那它这儿呢,会返回触货false,那么这块打印上架完成,那说明它应该是上架完成的,我们来看,那么确实呢是上架完成的。
03:02
相当于这一块呢,返回的是一个true false,来看一下我们的这个返回走我们在这判断,如果返回处,那我们就OK,返回false呢,那就是error,对了,我们在这呢,判断反了,它在这一块呢,是一个是否有错误,如果我们这返回的是处,那就代表有错误,返回false那才是没错误,那为了方便看我们的这个返回,我们来把这块的内容返回数据我们也给大家打印一下,那来这个数据呢,我们来直接把这个B的这个响应点get to string,我们把这个to string来一打印,们来重新启动检索符务,那说这一块呢,判断应该是反的,那我们把这个反向来操作一下,非force。那启动成功,我们现在呢,再来进行一个测试,我们还是在这来点击上架,好,那现在再来点击上架,比如还是13号商品,我们来点击上架。那现在来到我们的product product以前的功能都没处理完,我们直接先放行,来重新点上架,好,我们来点击上架,来到我们product新功能,我们再来点一下上架。
04:12
现在呢,我们要上架PU11号商品,好来直接放行到下一步走,首先呢,他去来查询库存,库存服务呢我们没有启动,上一次呢已经查过了,这次应该会很快走,诶我们发现我们很快就查到了这个库存,这个库存呢返回了一个0SUCCESS,那查成功了,但真正的库存内容这一块还没有返回,所以我们来获取内容的时候又会出现问题,来继续运行,发现走到了看尺异常这一块,异常的原因是控制帧异常,相当于我们获取data是获取不到的,说明这一块呢我们还有问题,我们一会儿来调,当然我们现在来继续走,那在这来远程发送给ES。进行数据保存,我们现在再来运行走。那如果保存完了,我们来看这个R对象,那保存完成以后呢,我们这个R就会有成功失败,这打印呢,上架异常,我们看我们的库存的这个控制台上架完成。
05:11
返回的这个数据我们也得在这儿呢,打印一下来看一下返回的这个数据走。我们在这儿使用大括号来打印一下,来重新启动我们的检索服务,主要是我们的这一块的判断,B的这一块一定要是false,那说明是没有错误的,好,我们来点击CTRL们来到这一块的方法调用,那如果它是false,那我们就会返回,OK,除了代表有错了,我们才会返回异常,好,我们重新启动一下。那这块呢,我们也就不用debug了,我们来直接来看,我们现在来重新上架,我来点击上架。我们先把我们之前的这个方法呢,走完走。那现在再来点击上架,点击上架。再来点一次,我们在这儿呢,点击上架,好们来到这儿,现在呢,我们现在要上架11号商品,没问题,来直接放行,我们现来查库存,库存呢还是有问题的,我们先放行,检查我们的这个商品的保存,我们先来看一下那整个的R返回,那现在呢,就应该是一个成功返回,我们修改了逻辑以后,先0SUCCESS没问题,那成功返回以后呢,我们在这儿就会修改状态走,那状态修改完以后呢,我们整个运行结束走放行,那我们这一块呢,就应该是已上架好没问题。
06:30
那接下来我们继续来调试我们的库存这一块功能,发现库存返回的时候,我们的这个数据是有问题的。有问题的原因是什么?我们先来到库存的ctrler们给这一块呢,来打一个断点,我们现在来调用上架,我们来点击上架13号。好,我们直接来放行,包括呢,我来直接放行的库存服务。我们商品服务呢,先在这儿超时了,我们也不用管了,我们先来到我们的库存服务,当库存服务呢这一块来调节一下,那先来看那查询到这个库存vos是有的,包括呢,我们来准备了一个数据啊,OKOK里边呢,默认现在OK里边只有我们这两个是0SUCCESS,然后我们给里边还要放一个data塔数据,好我们调用它set data。
07:18
我们把这个呢放进去,放进去以后我们发现OK里边居然没动,还是code message,我们新保存的数据呢,没有保存进去,我们来点进这个R,我们新的数据是它里边的一个属性叫data,它没有保存进去,那这个呢,就是由于我们这个R是一个哈希map的原因。我们在这写的所有的私有属性我们都没用了,哈西曼普呢,我们来只能存JKY6了,所以我们写的这个方法也就是我们用的,那这样的话呢,我们把这一块我来删掉,那么要怎么返回数据呢?好,我先来给它返回,把我们这一块的逻辑代码来改一下,那这一块我们也不返回这个泛型了,因为泛型呢,在哈西曼夫这一块已经没用了,如果我们R是一个普通对象,我们这一块还不错。
08:08
所以呢,我们最快的返回,我们可以来返回这么一个list,那别处方法签名一改list,我们自然能拿到数据,答我呢,还是推荐我们全系统返回我们这个R对象,我们现在来写r.OK好,来r.OK。OK的时候呢,我们还把我们的数据我们来放进去,我给R来写一个方法,因为它是一个map,所以我们放数据干什么,我们都应该给map里边放,不是来写自己的私有属性,比如我专门来写一个方法。这个方法呢,还是返回R,为了方便链式调用,我们就叫set data。给它里边呢,保存数据,保存什么数据这一块呢,我们来接收任何类型的数据,我们就叫data,我们把这个数据呢,我们调用map的put方法,我们用data存进去,我们就叫这个data,好,那么最终呢,啊,Return,把这个this对象还返回this。
09:08
这样我们以后想要返回数据了,我r.OK再点一个set data,我们把我们的data呢放进去,而且呢,整个返回的还是R对象。只有我们这样写,我们才能给R里边放好数据,那所有呢,我们的这个远程调用也就有问题了,来到我们的远程调用这一块,那这一块呢,就无需来写我们的这个泛型,我们把它删掉,包括呢,我们的远程的这个接口方法,我们来点过来,我们也返回的是完整的R,但是完整的R里边呢,我们又封装了这个data。那set data的时候呢,K叫data,直视我们整个list,那还想转成这个list,那怎么转呢?我们希望这个R对象好,那就让这个R对象,那希望这个R对象它有一个方法就叫get data。而且呢,我们说把它转成什么对象,它就能把我给我们转成什么对象,所以我们希望这个get data方法能帮我们来整个返回,那么就给这来写一个,我们就叫public,那么来返回某个类型的对象,好,我先写上object,我们就叫get data,那我们真正要get data的数据,我们先要get,从我们的map里边,我们放呢,也是给map里边放,取呢也是从map里边取,我们先得取到这个data,而且呢,我们要把这个data转成我们指定的类型,要指定什么类型,我们可以在这调用的时候来在这指定。
10:34
比如我想转成一个list类型的SQ汉字to VO,这呢还是一个复杂的类型,复杂的类型呢,我推荐大家来这么来写。我们在写之前,我们先来想,我们会把我们的这个数据封装的这个R对象以接的方式写出去,那别人远程接口调用的时候,其实get来的data这个数据呢,已经是spring mvc给我们转换过来的R对象,R对象里边。
11:04
我们get data,这个也是一个map,但是map呢,要转成我们指定类型的对象,怎么转?我们可以利用杰森,我们使用杰森工具,它里边有一个叫pass object叫转换对象,可以将一个字符串转换成我们指定类型的对象,比如我们在这可以来传我们的类型class,当然复杂类型呢,在这一块要传一个叫type reference,所以我来写一个能传一个type reference,好我把这个type reference我让别人传过来,我们就叫type reference,这个reference呢,这是阿里巴巴为我们提供的这个泛型,好,我们希望呢,给我们传入这个类型的,这个类型呢,里边来写一个体,这是它的这个泛型,而我们最终返回的这个对象也是这个泛型,包括我们在方法这要用这个泛型,我们就得先来声明,我们这个泛型走,那们希望呢,传一个type reference,那最终呢,我们就将数据给你转换成你指定的这个。
12:04
类型,那这个类型呢,最终会返回我们这个T对象来return,把这个T对象呢来返回出去,而我们这个对象啊,这块的test内容就应该是get从map里边得到的这个数据,把它呢转成杰森,再把杰森逆转回来,那为什么要转杰S,因为我们说get的这个data,它默认是map类型的,如果我们给里边put了一个data data是一个对象,它逆转呢也会转成map,我们一会调试的时候大家就可以看见,所以呢,我们就方法就应该这么写,我们写一个杰森to杰森string,把它拿到这这个数据我们先转成文本,再来逆转回来,好把这个文本呢,再逆转回我们想要的这个类型。我们相当于利用我们的fast接,利用我们阿里提供的fast接进行逆转,好我们来到我们的这一块的方法,那我们的get data呢,我们就要传一个type reference reference type reference,那我们就来拗一个type reference来写上type reference,好那new的时候呢,这块只需要来写上我们要转成什么类型,那我直接写一个list的这个SQ汉字stock。
13:21
那么这一块呢,就会来转化我们这个to,那么new的这个type reference呢,它这个构造器是来受保护的,那么就需要写成一个内部类对象,好,我们把这个写一个大括号,我们来把我们的这个方法拆开,我们整个合体写,大家可能不好看,我们的type reference,好,我们最终返回这是一个类型叫type reference。我们要转成什么类型?我们只需要在这写成我们的类型,把这个包装成fast,杰森能认识的type reference给这一放,我们就会调用我们的get方法,转成我们指定的类型,最终返回我们这个类型。所以呢,我们在这一块我们就稍微这么处理了一下,那么现在来重启我们这三个服务来重新启动。
14:06
以debug模式。那启动完成呢,我们现在再来做一个整体测试,主要是我们返回数据这一块,我们原来写的那种泛型是不可以的,所以我们自己来写了一个逆转方法,其实这个公共的这个类大家直接复制过来用就行了,如果会写这一块呢,那就更好了,好我们现在来再做做一个上架测试,好我们也来重新点击上架,那上架呢,来到我们的PO13,我们现在来放行,先让他来查询库存。好,我们来到这个库存的查询方法,那由于我们刚启动这是第一次,所以查库存呢,可能查不到我们的接口超时,我们现在来运行。好,我们来到库存这一块,我们直接将库存的断点我们给它去掉,然后呢,我们来看查询到的这些库存数据,完了以后呢,我们来到product里边,我们看到了这个读取超时,好没问题,确实超时了,那么再来放行,我们全部放行,我们重新来一次,在这儿呢,还要修改状态,这个状态呢,我们也来放行,他这如果一修改,那我们的这一块上架呢,就会上架成功。
15:17
由于刚才超时了,我们前端这一块也没有改,这个上架成功,我现现在重新来点击上架,好,现在来13号商品我们来走,我们直接放行。我们远程库存的这个断点呢,我们刚才已经去掉了,只剩SPU英缝了,好,那现在再来查库存走。这个库存呢,在这儿还是超时好,我们来把它全部放行完,我们再来试几次,好,这个修改好放行。好,这块库存呢,我们先来保证它确实是启动的。这里边的断点之类,我们一定要给他放行掉,哎,这是之前库存的断点都没有放行。好,我们来重新来调试,我来点击上架,现在来进来,我们来放行,来到我们查库存方法走,那么这一块打印load balance没有找到我们库存服务,那这个库存服务呢,一定要保证我们现在启动起来,而且呢要在注册中心中有,我们来看一下,我们来到我们的nacos注册中心。
16:17
我们用min,我们使用NAS登录进来,NAS。来写NAS,好,我们来看我们的服务列表,我们库存服务呢,在这确实有,那就我们再来调用一次,这就是我们分布式在远程调用的时候呢,经常会服务不稳定导致的找不到问题,好,我们来再来点上架,那先把之前的功能全部放行掉,保证呢这一块都没有功能卡在这,好我们来重新来点上架,再来点商架。我们来到商品服务。好,我们来重新再来点击一次上架,来到商品服务的断点,Po ID是13,来到debug这一块的状态,好,我们来放行走。先来远程调用我们库存走,现在呢就很快了,RR的整个返回我们也可以来看一下,里边有message code以及data,大家注意看这个data data呢是一个a list list当然有18个,18个里边每一个它是一个map map呢是我们的这个对象的KSQID是九汉字,Look是false,所以我们之前说了。
17:24
那么R在这封装的时候呢,它会将我们之前放的数据转成map,那把这个map里边的这个list史的map要转成我们想要用的类型,那我们在这块就是先把它转成接S,再来逆转回来,所以我们这一块来让它逆转走,我们先来直接来调用这个方法,R get data,我们在这来计算一下,看看能不能逆转成功走,然后发现呢,这一块逆转成功那就没问题了,然后我们这一块呢,就会来进行便利便历呢,将我们的每一个库存信息设置到我们真正的这个map里边,现在库存就是查到真信息了,走。
18:02
那么来继续来运行,那真信息以后呢,每一个库存设置自己的库存信息,有就是有,没有就是没有,然后我们再来放行,放行到最后我们来进行商品上架保存好,我们来完成,完成成功以后呢,我们来修改状态,好整个完成,那么这个功能呢,就全部做完了,我们把这些断点呢,全部来移除掉,移除掉以后呢,我们来做一个整体测试。那们现在来刷新,由我们这个上架呢,已经完成了,所以我们这个状态改为已上架了,假设呢没有上架,那把这个呢都改成一,如果已上架呢,那就是一没上架就是零,我们先不改,我们看现在呢都是一了,好我们把13号呢改成零,改成零,那现在来重新测试一下它上架,我来点击上架,先让他查询,没有上架的,我们可以点上架,点击上架,那们在这儿呢,操作成功,操作成功呢,它会来自动来刷新我们这个页面,现在已上架,好没问题,包括我们来查询tner在这里边来检索我们上架的这些数据,走一直拖到后边,我们现在有26个数数据。
19:10
这都上架成功了,不会出现我们无限次点上架,就给里边无限保存,因为我们保存的时候,每一个商品指定了ides的这个保存操作判断,只要有这个ID的这个商品啊,那它相当于是一个更新操作。所以呢,我们不害怕ES里边数据插入多条,因为同样的数据呢,只要ID一样,它都是一个更新操作,那么整个这个上架功能我们就调试通过了,我们自己编写到R里边来解析返回数据的方法,大家也注意一下。
我来说两句