下單後扣庫存失敗,不一致了。下單失敗,扣庫存成功不一致。
建立兩個資料庫
第乙個 toov_order
sql:
set foreign_key_checks=0;
-- ----------------------------
-- table structure for order
-- ----------------------------
drop table if exists `order`;
create table `order` (
`id` int(11) not null auto_increment,
`name` varchar(255) default null comment '訂單名稱',
`order_createtime` datetime default null comment '下單時間',
`order_state` int(11) default null comment '訂單狀態 0 已經未支付 1已經支付 2已退單',
`order_money` double(10,0) default null comment '訂單**',
`commodity_id` int(10) default null comment '商品id',
primary key (`id`)
) engine=innodb auto_increment=14 default charset=utf8;
-- ----------------------------
-- records of order
-- ----------------------------
insert into `order` values ('9', '洗髮水', '2018-10-09 15:30:03', '300', '0', '30');
insert into `order` values ('13', '手機殼', '2018-10-09 16:59:33', '300', '0', '30');
第二個toov5_stock
set foreign_key_checks=0;
-- ----------------------------
-- table structure for stock
-- ----------------------------
drop table if exists `stock`;
create table `stock` (
`id` int(11) not null auto_increment,
`commodity_id` int(11) default null comment '商品id',
`stock` int(11) default null comment '庫存餘額',
primary key (`id`)
) engine=innodb auto_increment=2 default charset=utf8;
-- ----------------------------
-- records of stock
-- ----------------------------
insert into `stock` values ('1', '30', '89');
庫存,訂單,積分的分布式事務
乙個訂單支付之後,我們需要做下面的步驟 減庫存可以採用同步呼叫 feign的方式 也可以採用非同步呼叫 rabbitmq傳遞訊息 我們這裡採用同步呼叫,接下來我們分析為什麼 如果我們採用非同步呼叫的方式,減庫存的這條訊息傳送到mq就不管了,那麼到底庫存減成功了沒有呢?這我們並不知道,如果庫存不足,那...
clickhouse 建立分布式表
建立本地表 create table yh118 on cluster test time datetime,item guid string,metric name lowcardinality string alg name lowcardinality string value boolean...
補充上個帖子的分布式事務之扣減庫存
當業務規模不大,並且對於生成訂單並凍結庫存等操作要求一致性較高時,比較推薦acid資料庫進行操作,加入快取或訊息佇列後複雜度以及實時一致性較差 比如有如下場景 步驟相關業務 1凍結庫存 保證下單時有足夠的庫存 2生成對應的訂單 3支付訂單,扣減凍結庫存 1 該場景如果僅使用acid資料庫進行控制,則...