开发者学堂课程【RocketMQ 知识精讲与项目实战(第二阶段):失败补偿机制测试】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/703/detail/12433
失败补偿机制测试
当把整个消息回退的都做完之后,来做一个消息确认失败的一个测试,看一下现在的失败补偿机制能不能保证现在服务的一个数据的完整系统。
现在先去把数据的状态确认一下,现在的优惠券,依然是没有使用的订单 ID,还有使用时间,库存是1000个。
现在把使用记录全部都删掉,然后把消费日志表也都去掉,然后订单也全部都删掉,保证数据没有干扰。然后确认一下用户的余额现在是1000。余额的一个使用记录,也把它全部删掉。
现在这些数据,已经都归位,回到最原始的一个状态。现在就来启动我们各个的微幅。让它去启动起来,等这几个全部都启动起来之后,就来去进行消息的 orderservice 处理。
发送后进行订单的确认,再看是是否给 offer services 当中留了一个异常码。现在异常是存在的,然后有了这个消息,看发送后能不能保证这三个服务的数据。这几个现在都已经启动起来,然后回到这个地方,现在来测试一下。
代码如下:
@Test
public void confirmOrder(){
Long coupouId=345988230098857984L; Long
goodsId=345959443973935104L Long
userId=345963634385633280L
TradeOrder order=new TradeOrder();
order.setGoodsId(goodsId); order.setuserId(userId);
order.setcouponid(coupouId); order.setAddress("北京");
order.setGoodsNumber(1);
order.setGoodsPrice(new BigDecimal(val:1000));
order.setshippingFee(BigDecimalZERO);
order.setorderAmount(new BigDecimal(val:1000))
order.setMoneyPaid(new BigDecimal(val:100));
orderService.confirmOrder(order);
现在注意观察消息日志有没有确认订单,然后这边儿执行完了之后,看是否接收到 consumer 类似的信息。
回退优惠券成功以后,用户服务用到上面,这里会接收到消息余额。看一下余额有没有更改,现在没有更改,然后余额之前使用过一次,现在又把它回退了。
接收到消息以后看回馈库存,库存刚刚1000。现在依然是1000.
然后来看一下订单表,订单表订单的状态已经设置,刚才订单状态被改为取消,现在看一下它有没有起作用。这个订单可以证明回馈。
经过刚刚的分析,订单表的状态应该是0,是这个未确认,那没有改成我们期望的这个已取消。
原因是收到这个消息的消费者还没来得及去执行,但测试的方法已经结束了。
结束了之后,这个微服务其实就已经停了,所以我们现在要保证让我们当前的这个测试方法不要停止,得让它们去等待键盘的输入,然后重新执行。
现在重新测试一下,现在的服务正在启动,然后这个微博呢,由于加了等待键盘输入这么一句话,所以这个方法就不会停止,现在这张就是订单接收消息成功,订单状态设置为取消。
然后由于取消值改变了,数据库有一点不一样,他消息的取消保证了我们当前数据的一致性。
第一个业务业务失败补偿机制就完成了。具体就是回退库存、回退优惠券、回退余额和取消订单四个步骤。