A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

2.4.3 消息队列实现最终一致
本方案是将分布式事务拆分成多个本地事务来完成,并且由消息队列异步协调完成,如下图:
下边以下单减少库存为例来说明:

1、订单服务和库存服务完成检查和预留资源。
2、订单服务在本地事务中完成添加订单表记录和添加“减少库存任务消息”。
3、由定时任务根据消息表的记录发送给MQ通知库存服务执行减库存操作。
4、库存服务执行减少库存,并且记录执行消息状态(为避免重复执行消息,在执行减库存之前查询是否执行过此 消息)。
5、库存服务向MQ发送完成减少库存的消息。
6、订单服务接收到完成库存减少的消息后删除原来添加的“减少库存任务消息”。
实现最终事务一致要求:预留资源成功理论上要求正式执行成功,如果执行失败会进行重试,要求业务执行方法实 现幂等。
  优点 :
由MQ按异步的方式协调完成事务,性能较高。 不用实现try/confirm/cancel接口,开发成本比TCC低。
缺点:
此方式基于关系数据库本地事务来实现,会出现频繁读写数据库记录,浪费数据库资源,另外对于高并发操作不是 最佳方案。

2.5 自动添加选课方案
2.5.1 搭建环境
根据自动选课需求,为了更好的分析解决方案,这里搭建订单工程及数据库。
2.5.2.1 创建订单工程
导入资料下的xc-service-manage-order工程。
2.5.2.2 创建订单数据库
1、创建订单数据库xc_order(MySQL) 导入xc_order.sql


1)xc_orders:订单主表
记录订单的主要信息


3)xc_orders_pay:订单支付表
记录订单的支付状态



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马