springcloud-shardingjdbc-seata分布式事务

服务结构

image

引入依赖

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

        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-seata
        
        
            org.apache.shardingsphere
            sharding-transaction-base-seata-at
        

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

项目地址


作者博客

你可能感兴趣的:(springcloud-shardingjdbc-seata分布式事务)