1.分布式事務業(yè)務說明
這里我們會創(chuàng)建三個服務沃测,一個訂單服務沙咏,一個庫存服務,一個賬戶服務践险。
當用戶下單時猿妈,會在訂單服務中創(chuàng)建一個訂單,然后通過遠程調用庫存服務來扣減下單商品的庫存巍虫,
再通過遠程調用賬戶服務來扣減用戶賬戶里面的余額彭则,
最后在訂單服務中修改訂單狀態(tài)為已完成
該操作跨越三個數據庫,有兩次遠程調用占遥,很明顯會有分布式事務問題俯抖。
2.創(chuàng)建業(yè)務數據庫
seata_order:存儲訂單的數據庫;
seata_storage:存儲庫存的數據庫瓦胎;
seata_account:存儲賬戶信息的數據庫芬萍。
并在數據庫下創(chuàng)建相應的業(yè)務表并插入幾條數據
sql語句:
CREATE DATABASE seata_order;
USE seata_order;
CREATE TABLE t_order(
id BIGINT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
user_id BIGINT(11) DEFAULT NULL COMMENT '用戶id',
product_id BIGINT(11) DEFAULT NULL COMMENT '產品id',
count INT(11) DEFAULT NULL COMMENT '數量',
money DECIMAL(11,0) DEFAULT NULL COMMENT '金額',
status INT(1) DEFAULT NULL COMMENT '訂單狀態(tài):0創(chuàng)建中,1已完結'
)ENGINE=InnoDB AUTO_INCREMENT=7 CHARSET=utf8;
CREATE DATABASE seata_storage;
USE seata_storage;
CREATE TABLE t_storage(
id BIGINT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
product_id BIGINT(11) DEFAULT NULL COMMENT '產品id',
total INT(11) DEFAULT NULL COMMENT '總庫存',
used INT(11) DEFAULT NULL COMMENT '已用庫存',
residue INT(11) DEFAULT NULL COMMENT '剩余庫存'
)ENGINE=InnoDB AUTO_INCREMENT=7 CHARSET=utf8;
INSERT INTO t_storage(id, product_id, total, used, residue) VALUES(1,1,100,0,100);
CREATE DATABASE seata_account;
USE seata_account;
CREATE TABLE t_account(
id BIGINT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
user_id BIGINT(11) DEFAULT NULL COMMENT '用戶id',
total DECIMAL(10,0) DEFAULT NULL COMMENT '總額度',
used DECIMAL(10,0) DEFAULT NULL COMMENT '已用額度',
residue DECIMAL(10,0) DEFAULT 0 COMMENT '剩余可用額度'
)ENGINE=InnoDB AUTO_INCREMENT=7 CHARSET=utf8;
INSERT INTO t_account(id, user_id, total, used, residue) VALUES(1,1,1000,0,1000);
3.在每個數據庫創(chuàng)建業(yè)務回滾日志表
建表語句在conf下的db_undo_log.sql
我們分別在三個業(yè)務數據庫下執(zhí)行建表語句即可搔啊。
這就是我們最后要準備好的數據表