暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

springcloud-shardingjdbc-seata分布式事务

dean技术分享 2020-03-24
994

服务结构

引入依赖

其他依赖查看项目源码获取

        <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
任何一个服务出现异常后,所有的服务都会回滚


阅读原文有项目链接

文章转载自dean技术分享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论