RocketMQ实战(上)

期望消失时,恐惧就产生。

                    ——格拉西安

大纲

图示

案例介绍

1.业务分析

模拟电商网站购物场景中的【下单】和【支付】业务

图示

(1)下单

用户请求订单系统下单

订单系统通过RPC调用订单服务下单

订单服务调用调用库存服务,扣减库存

订单服务调用优惠券服务,扣减优惠券

订单支付完成后确认订单

(2)支付

用户请求支付系统

支付系统调用第三方支付平台API进行发起支付流程

用户通过第三方支付平台支付成功后,第三方支付平台回调通知支付系统

支付系统调用订单服务确认订单

问题分析

1.分布式系统宕机问题

整个系统是分布式部署,有订单系统、商品系统、会员系统。三个系统通过RPC调用完成整个下单流程。RPC调用会导致下单中各系统耦合在一起,假如会员系统宕机,会导致下单流程的不可用。

如何异步解耦:

利用RocketMQ,订单系统在下单后,作为生产者把“下单消息”写入MQ,商品系统与会员系统作为消费者消费MQ中的“下单消息”。这样可以达到异步解耦的目的,只要订单系统正常,对于用户来说下单业务都可以正常进行。

2.数据完整性问题

用户提交订单后,扣减库存成功、扣减优惠券成功,但是在确认订单操作失败(比如:支付失败),那么就需要对库存、优惠券进行回退。

如何保证数据的完整性?

在收到确认订单失败通知后,向MQ发送“确认失败消息”

商品系统与会员系统作为消费者监听“确认失败消息”,进行对应业务的回退。

3.无效订单、同行攻击!

用户通过第三方支付平台(支付宝、微信)支付,假如下了订单,过了很久还没支付,那么这个订单应该取消,所以这个地方涉及到限时订单场景,系统在15分钟之内没有支付成功,则需要取消订单,同时回退库存与优惠券

4.秒杀、抢购高峰流程冲击

项目代码介绍

1.项目工程

图示
图示
图示

2.数据库

图示

(1)订单表

图示

(2)商品表

图示

(3)用户表

图示

(4)优惠券表

图示

3.框架及技术

    整体项目使用SpringBoot搭建,整合了Mybatis,Maven依赖如下:

图示

    SpringBoot整合RocketMQ,同时使用gson作为MQ发送和消费的序列工具

图示

另外使用mybaits-gengerator逆向工程针对数据表生成CURD持久层代码

图示
图示


链接: https://pan.baidu.com/s/1gCOLPI76hu1IJwLJnVOdfg  提取码: rc2r 

我是娆疆_蚩梦,让坚持成为一种习惯,感谢各位大佬的:点赞收藏评论,我们下期见!


上一篇:RocketMQ常见问题分析以及性能优化

下一篇:RocketMQ实战(下)

你可能感兴趣的:(RocketMQ实战(上))