服务结构
image
引入依赖
其他依赖查看项目源码获取
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-transaction-base-seata-at</artifactId>
</dependency>
classpath下添加seata.conf配置文件
client {
#application.id即为spring服务名称application.name
application.id = sharding-pay-service
transaction.service.group = my_test_tx_group
}
主要业务代码
pay-service
@GlobalTransactional
@Override
public String pay(Pay pay){
//在调用db前修改TransactionTypeHolder,可以对事务类型进行切换
//其他服务中也需要配置
TransactionTypeHolder.set(TransactionType.BASE);
payDAO.insert(pay);
Order order = new Order();
order.setTPayId(pay.getId());
order.setUserId(pay.getUserId());
orderFeign.addOrder(order);
//模拟异常
// int i = 1/0;
return "success";
}
order-service
@Override
public String addOrder(Order order) {
TransactionTypeHolder.set(TransactionType.BASE);
orderDAO.insert(order);
return "success";
}
shardingjdbc整合seata,不需要配置seata的自动代理数据源
测试
curl -X POST -d '{"money":10, "userId":1}' http://localhost:8080/pay
任何一个服务出现异常后,所有的服务都会回滚