使用seata来解决分布式事务

本文介绍了seata,一个由阿里开源的分布式事务解决方案,它基于2PC协议并进行了优化,如异步提交、重试策略等。seata提供了AT和MT模式,适用于多种数据库和资源。在微服务中应用seata,需创建代理数据库连接、全局事务扫描器、设置XID传递等步骤,其侵入性小,易于操作。
摘要由CSDN通过智能技术生成

使用seata(Fescar)解决分布式事务,seata的用法

seata是一款阿里开源的解决分布式事务的框架,原名叫Fescar,后改名为seata。像我们常用的淘宝也是使用的seata解决的分布式事务。seata是一款基于两阶段提交的2PC协议。且seata基于2PC协议有很大的改进。
1.解决了事务提交者是单点存在的问题。
2.解决了同步阻塞的问题,采用异步提交的方式,当一个服务完成就提交。
3.解决了数据不一致的问题,:如果出现部分commit失败,那么fescar-server会根据当前的事务模式和分支事务的返回状态的结果来进行不同的重试策略
4.解决了只能用于单一数据库的问题Fescar提供了两种模式,AT和MT。在AT模式下事务资源可以是任何支持ACID的数据库,在MT模式下事务资源没有限制,可以是缓存,可以是文件,可以是其他的等等。当然这两个模式也可以混用。
5.同时使用seata对代码的侵入性极小。容易操作。

像我们再微服务中应用seata解决分布式事务的话,我们需要引入一个微服务,这个微服务中大多是一些配置类

第一步

创建代理数据库连接

`/***
     * 创建代理数据库
     * @param environment
     * @return
     */
    @Bean
    public DataSource dataSource(Environment environment){
   
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(environment.getProperty("spring.datasource.url"));
        try {
   
            dataSource.setDriver(DriverManager.getDriver(environment.getProperty("spring.datasource.url")));
        } catch (SQLException e) {
   
            throw new RuntimeException("can't recognize dataSource Driver");
        }
        dataSource.setUsername(environment.getProperty("spring.datasource.username"));
        dataSource.setPassword(environment.getProperty("spring.datasource.password"));
        return new DataSourceProxy(dataSource)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值