00:00
接下来我们就来调试一下上一节课遗留的问题,就是我们这个订单的远程服务,在查订单状态的时候,他报的是数据类型转换的这个异常,说把这个HTM2转不过来,转不成R对象,那这个是什么问题呢?我们可以来给这打一个断点,以debug模式启动它,那启动之前呢,我可以先这样,那先重新来下一个单,因为我们接下来要消费消息的时候,你就来看我们这个消息呢是怎么样的,那现在来下一个单,我们来点一个提交订单,这个订单呢,提交会失败,失败以后呢,Rabbit MQ,我们其他的这个队列我已经给清空了,然后我们来看一下re MQ的这个延时队列里边,那就有两个消息,然后我们这个人呢,就来等待接消息,那我们现在呢,重启一下我们这个订单服务,好,我们先来以得半个模式来启动重启订单服务,我们就来专门监听我们这两个消息,看是什么问题,好那现在这个库存服务呢,我们就启动成功了,那启动成功。
01:00
以后呢,接下来只要有消息我们收到,那就会断点进来,那么就给这呢打一个断点来等待他这个进来啊,我们这个控制台呢,调到这儿好,现在我们就来等他进来,好现我们这个队列里边呢,收到消息了,我们接下来得bug就来一步一步走走走走,主要呢是我们这一块远程调用有问题,所以我们走到远程调用这一块呢,我们就来step into进来,看一下来要获取订单的状态,Step into来看一下它是什么问题,大家判断这个equals之类的是不是这个好,由于不是我们object继承的equals哈,Code等等,那接下来直接来执行远程调用,来step into进来,他先构造一个请求,整一个重视器之类的,我们这些呢都不用看,来到这ex cut and decode就是执行并且解码来step into进来,那接下来呢,我们就能看到这一行,Clientcute这些我们执行远程请求,在这一块呢,是构造请求,构造请求我们就不看了。那么在这一块呢,会执行我们请求得到一个响应,而且这个响应呢,我们在下边来看一下,下边下边呢,拿各种响应体数据,整整整在最后边这一个叫de扣的response,现面把响应的解码成我们要用的这个对象类型,所以我们接下来就来看它这一块执行完成以后响应内容是什么,那么接下来就直接把它来放行,那一放行我们这个响应就会远程调用,远程调用呢我们就会执行,执行完了我们来看一下这个效果,Response,那这个效果呢,主要来看我们这个状态码呢是200,相当于远程是执行成功的,包括我们请求的路径来查这个订单状态也没问题,主要看我们这个body,好,这个body点开呢,就是我们这个响应题的内容,显体内容呢,发现这一块呢,有一个this,这个this呢,大概是这样说,Message header,我们有一个请求头,请求头里边呢,说了好多的这个头数据,这是我们请求头的,当然我们肯定要看相关响应头的信息,那我们这个。
02:59
Response都在这这我们这个响应头信息,发现响应头信息里边呢,这包含了非常多的数据,当然呢,我们来看上面上面这一块,那刚一进来这个this的时候,但是它这儿呢,提示了一个链接地址,那这个链接地址呢,我们看这是一个登录页。
03:17
那说明我们这个远程请求一发出去以后,他给我们返回了一个登录页,那其实应该是这样子的,因为我们以前正好说过,我们所有的这个订单服务的所有请求,我们还专门写了一个拦截器在这儿,所有请求都必须登录了以后才能访问,所以这样的话,像当们远程调用来访问订单,订单呢要求我们必须登录以后才能访问,那这样就奇怪了,我们现在呢,这是一个远程调用,是无需登录的,我们这本来就是服务之间的调用,所以呢,我们现在可以的做法就是我们在这儿呢,让拦截器所有请求一进来匹配一下,如果你现在请求的这个路径。是我们的这个order order之类的,我们这个路径就是这个路径,那么就可以把你给放行一下,咱们来拦截器里边添一个设置就行了,虽然请求路径呢,是他们我们就来放行,但是我们注意后边呢,这又是一个动态的,由于这是一块的订单号,所以请求路径呢又不固定,那接下来怎么办?我们可以使用咱们这个spring加的有一个叫an pass me,就是我们这个路径的匹配器,这个匹配器呢,我们可以让它来匹配一些路径,比如用我们spring mvc的这些at路径写法,我来这么来写,Order order status order order status下边双星,那就是我们这个订单,订单status下边的所有任意多层路径的这个请求,我们呢都可以给你放行,所以呢,这是我们的这个路径匹配,我们拿它匹配,但是匹配的是哪个路径呢?那就是当前请求拦截器拦的当前请求,当前请求的路径在这有一个叫request uri u。
05:00
那指的就是请求后边的这串路径URL,还会加上服务器的整个地址名,这一块呢我们就不要了,只要后边这个UR,我们就来看当前请求的这个路径是不是我们需要匹配的这个内容,那如果是我们就直接给它放行就行了啊INF来写一个matchche,如果匹配的话,那么就直接放行,那我们这个呢是无需来进行测试的,所以我们在这儿直接放行,那放行了以后,那接下来我们这个请求呢,就可以不用去登录页了,那远程调用呢才能成功,那么现在呢,把我们这个服务重新以deug式模式我启动起来,那现在也不以debug模式了,那现在直接return启动起来,启动起来以后呢,我们来看效果。那现在的这个效果呢,就是以前呢,是由于我们这个订单服务需要登录造成的,那现在我们把这个登录给放行了,那这个服务呢,只要一启动,那一启动以后呢,我们这个所有解锁订单的请求都会来到他这,他呢来进行一步一步的解锁,好我们现在来等,等待这个启动完成,好这个启动成功以后呢,我发现控制台也没有打印说要消费订单的之类的什么消息。
06:11
我们来看一下我们这一块,然MQ呢,相当你记住了这个消费者,然后呢,他总是把这个on act,那就一直on a CK,那这叫on a c,那就追溯到我们以前都没有return到这个队列里边了,那行他记住了我们就不管了,当然我们现在呢,整个消费消息只要消费成功就行,那么现在来看一下,我们把这个里边的所有消息我们给它清空掉,好,我把这个库存服务呢全部停掉,停掉以后呢,这里边的消息才会变为ready状态,别人呢才会拿到,然后呢,把这里边的消息给它清空掉,能重新从头到尾来做一个自动解锁的演示。好,我们现在来把这个消息呢获取出来,整个队列呢,现在都是空的,好,我们来重新启动我们的这个库存服务,库存服务呢,之前远程调用我们这个订单服务,这个订单服务呢,导致我们需要登录这一块呢没有成功,所以我们现在呢改造一下。
07:04
包括我们现在把这一块的整体代码,我们都可以改造到更清晰一点,我们来所有的以后的监听器专门放到listener里边,好这个listen呢里边呢,有我们这个rabbit MQ的监听器,那现在是一个to releaseto release,我库存释放的这个的这个监听器,好我们来写一个自个的监听器一个。Service我们也把它加到业务逻辑组件中,然后呢,我们是让他先听我们的消息listen,那把我们这个wyre,我们的这一块的信息,我就把这一块的直接提出来,好,我们专门来写一个listen呢,来做这个事情,那我们就不用写到我们这个service这个方法里边了,那接下来我们把这个所有的方法我们就直接来搬家,因为我们想要解锁消息呢,现在就需要有一个处理器来CTRLC来复制过来,直接CTRL x1剪切。好,接下来呢,将所有的解锁库存功能监听解锁库存我就写到这,写到这儿以后呢,那我们这一块的所有调用,那我们就希望能直接调用我们这个库存服务WY,我们这个y SQ service这个接口SQ service能调用它的这个解锁就行了,那希望呢,他就有一个方法点一个叫unlock。
08:23
好,我们就叫onloto这个解锁库存,好这个解锁库存呢,把我需要解锁的信息传给你,你给我最终来进行解锁,我们把这个方法呢创建出来走,这是我们解锁库存的,好把这个解锁库存的方法的实现拿过来,整个解锁的实现你就从这一块呢,把它直接剪切过来就行了。把整个catch来拿过来。好,CTRLX,这是我们调用的解锁库存方法。那们在这呢,直接点进它的实现,把它的实现呢复制过来,但这一块的所有信息,那现在想要解锁库存,我们收到解锁库存的消息,那么接下来就在这儿来确定,确定我们这一块的这个库存单有没有,如果库存单都没有的话,我们就无需解锁,那只要所有是无需解锁我们库存解锁成功的,那我们什么都不做,只要收到有任何异常,我们也不用看尺了,有异常呢,就该抛,让他自己抛,我们在这一块呢,自己也不看异常,Ctrl all,那就来做正常的解锁库存信息,然后呢,我们在这一直执行,只要库存解锁了,CTRLY把这一行一删,然后这个方法只要一切正常运行,那就是库存解锁成功,那非正常运行,那就是解锁失败。
09:43
所以只要我们这个方法不抛出异常,那相当于就是解锁成功的,只锁成功,我们就应该给人家回复成功,因为如果我们是else条件也是无需解锁,无需解锁呢,相当于消息也消费了,我们就直接给人家回复成功就行,无需解锁好,那现在呢,我们就来专门准备了一个这个解锁库存的方法,这个解锁库存的方法呢,我们就在这儿调用,那调用呢可能会出异常,那么就在这儿来查看吃,只要有任何异常,那都是消息消费失败,那么就来给他把它呢回对一下就行了,走,有任何异常那就让他归队,点一个basic reject,我给他拒绝拒把当前消息呢,让他重新回对里边走,点一个deliver ta当前消息。
10:32
来写一个处,就是重新回对里边,只要我们这个方法执行成功了,我们就给他回复basic a。那么这个呢,执行成功了,执行成功是哪个消息,那就是这个消息点一个get message properties它执行成功了,然后呢,我们是不是批量回复,我们就回复自个儿的信息就行了,哪个消息消费成功了,我们就说哪个消息成了,所有消息进来呢,都会挨个在这儿尝试来进行解锁,来到我们这个解锁方法,好,那这个在解锁方法的这一块,我们就来打印收到解锁消息,那我把这个方法呢,就改造了一下,那下一节课我们就来整体测试一下我们库存的自动解锁功能。
我来说两句