既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
/\*\*
* debit balance of user’s account
*/
void debit(String userId, int money);
}
#### 主业务逻辑
public class BusinessServiceImpl implements BusinessService {
private StorageService storageService;
private OrderService orderService;
/\*\*
* purchase
*/
public void purchase(String userId, String commodityCode, int orderCount) {
storageService.deduct(commodityCode, orderCount);
orderService.create(userId, commodityCode, orderCount);
}
}
public class OrderServiceImpl implements OrderService {
private OrderDAO orderDAO;
private AccountService accountService;
public Order create(String userId, String commodityCode, int orderCount) {
int orderMoney = calculate(commodityCode, orderCount);
accountService.debit(userId, orderMoney);
Order order = new Order();
order.userId = userId;
order.commodityCode = commodityCode;
order.count = orderCount;
order.money = orderMoney;
// INSERT INTO orders ...
return orderDAO.insert(order);
}
## 使用seata解决分布式事务
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190508191248616.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNzkxMDQ1Mw==,size_16,color_FFFFFF,t_70)
我们仅仅需要在业务方法上使用注解@GlobalTransactional
@GlobalTransactional
public void purchase(String userId, String commodityCode, int orderCount) {
…
}
## Dubbo + SEATA的示例
#### 第1步:设置数据库
要求:带有InnoDB引擎的MySQL。
注意:实际上,示例用例中的3个服务应该有3个数据库。但是,我们只需创建一个数据库并配置3个数据源即可。
使用刚刚创建的数据库URL /用户名/密码修改Spring XML。
dubbo-account-service.xml dubbo-order-service.xml dubbo-storage-service.xml
< property name = “ url ” value = “ jdbc:mysql:// xxxx:3306 / xxx ” />
< property name = “ username ” value = “ xxx ” />
< property name = “ password ” value = “ xxx ” />
#### 第2步:创建UNDO\_LOG表
UNDO\_LOG SEATA AT模式需要表格。
– 注意此处0.3.0+ 增加唯一索引 ux_undo_log
CREATE TABLE undo_log
(
id
bigint(20) NOT NULL AUTO_INCREMENT,
branch_id
bigint(20) NOT NULL,
xid
varchar(100) NOT NULL,
rollback_info
longblob NOT NULL,
log_status
int(11) NOT NULL,
log_created
datetime NOT NULL,
log_modified
datetime NOT NULL,
ext
varchar(100) DEFAULT NULL,
PRIMARY KEY (id
),
UNIQUE KEY ux_undo_log
(xid
,branch_id
)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
#### 第3步:创建表格,例如业务
DROP TABLE IF EXISTS storage_tbl
;
CREATE TABLE storage_tbl
(
id
int(11) NOT NULL AUTO_INCREMENT,
commodity_code
varchar(255) DEFAULT NULL,
count
int(11) DEFAULT 0,
PRIMARY KEY (id
),
UNIQUE KEY (commodity_code
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS order_tbl
;
CREATE TABLE order_tbl
(
id
int(11) NOT NULL AUTO_INCREMENT,
user_id
varchar(255) DEFAULT NULL,
commodity_code
varchar(255) DEFAULT NULL,
count
int(11) DEFAULT 0,
money
int(11) DEFAULT 0,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS account_tbl
;
CREATE TABLE account_tbl
(
id
int(11) NOT NULL AUTO_INCREMENT,
user_id
varchar(255) DEFAULT NULL,
money
int(11) DEFAULT 0,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#### 第4步:启动服务器
* 从https://github.com/seata/seata/releases下载服务器包,解压缩。
sh seata-server.sh $LISTEN_PORT $STORE_MODE
e.g.
sh seata-server.sh 8091 file
#### 第5步:运行示例
转到样品repo:seata-samples
* 启动DubboAccountServiceStarter
* 启动DubboStorageServiceStarter
* 启动DubboOrderServiceStarter
* 运行DubboBusinessTester进行演示测试
TBD:运行演示应用程序的脚本
![img](https://img-blog.csdnimg.cn/img_convert/9d3fb41b99f816f830ecbb3435f2b77d.png)
![img](https://img-blog.csdnimg.cn/img_convert/7ac9d8a9b54b4c45cfc91444e56162c0.png)
![img](https://img-blog.csdnimg.cn/img_convert/42cb528cb65b9284ab0a128def53abc1.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**