springcloud-shardingjdbc-seata分布式事务

服务结构

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

项目地址


作者博客

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容