SpringBoot整合Seata

作者: 迦叶_金色的人生_荣耀而又辉煌 | 来源:发表于2021-10-06 06:50 被阅读0次

    上一篇 <<<Seata-核心源码分析
    下一篇 >>>Seata与Lcn的区别


    1.事务协调者(TC)启动

    A、创建数据库,并执行sql: db_store.sql
    B、修改 registry.conf和file.conf配置
    Registry.conf支持:file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
    file.conf:修改db信息
    C、seata-server.sh启动脚本

    2.发起方TM和参与方RM整合

    在关联的数据库里执行db_undo_log.sql后在执行下面操作

    2.1 引入jar包依赖

    <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-seata</artifactId>
            <version>2.1.1.RELEASE</version>
        </dependency>
    

    2.2 配置修改

    spring:
      cloud:
        nacos:
          discovery:
            server-addr: 10.211.55.16:8848
            #feign客户端的命名必须使用中划线,不能使用下划线
        refresh:
          enabled: false
          #seata配置
        alibaba:
          seata:
            tx-service-group: my_test_tx_group
      application:
        name: seata-user-service
      datasource:
        url: jdbc:mysql://localhost:3306/jarye?useUnicode=true&characterEncoding=UTF-8
        username: root
        password: 123456
        driver-class-name: com.mysql.jdbc.Driver
    

    拷贝registry.conf和file.conf到配置文件地方
    其中tx-service-group的配置要和file.conf里的vgroup_mapping名称一致

    service { 
      vgroup_mapping.my_test_tx_group = "default" 
      default.grouplist = "127.0.0.1:8091"
    }
    

    2.3 剔除默认数据源

    //自定义配置
    @Configuration
    public class DataSourceProxyConfig {
    
        @Bean
        @ConfigurationProperties(prefix = "spring.datasource")
        public DataSource dataSource() {
            return new DruidDataSource();
        }
    
        @Bean
        public DataSourceProxy dataSourceProxy(DataSource dataSource) {
            return new DataSourceProxy(dataSource);
        }
    
        @Bean
        public SqlSessionFactory sqlSessionFactoryBean(DataSourceProxy dataSourceProxy) throws Exception {
            SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
            sqlSessionFactoryBean.setDataSource(dataSourceProxy);
            sqlSessionFactoryBean.setTransactionFactory(new SpringManagedTransactionFactory());
            return sqlSessionFactoryBean.getObject();
        }
    }
    
    启动的地方剔除默认的数据源加载
    @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
    @MapperScan("com.jgspx.mapper")
    public class SeataUserApp {
        public static void main(String[] args) {
            SpringApplication.run(SeataUserApp.class);
        }
    }
    

    2.4 注解使用

    只要在发起方增加注解,参与方不用任何注解

    @GlobalTransactional
    @GetMapping("/orderToMember")
    public String orderToMember(Long userId) {
        orderMapper.insertUser(userId+"");
        String result = userServiceFeign.getUser(userId);
        return "我是订单服务,调用会员服务接口返回结果:" + result;
    }
    

    2.5 通过日志来验证

    当出现异常或超时,日志信息:
    Branch Rollbacked result: PhaseTwo_Rollbacked
    当执行成功,日志信息:
    Branch commit result: PhaseTwo_Committed


    推荐阅读:
    <<<分布式事务产生的背景
    <<<解决分布式事务的核心思路
    <<<柔性事务和刚性事务(ACID)
    <<<CAP理论简单概况
    <<<Base理论核心思想
    <<<一致性协议--XA接口
    <<<一致性协议--Jta规范
    <<<一致性协议--2PC提交协议
    <<<一致性协议--3PC提交协议
    <<<2PC与3PC协议的提交区别
    <<<主流的分布式事务解决框架
    <<<LCN-框架介绍
    <<<LCN-实现原理剖析
    <<<LCN-事务协调者(TM)安装启动
    <<<SpringBoot整合LCN
    <<<LCN-核心源码分析
    <<<LCN-集群模式介绍
    <<<Seata-框架介绍
    <<<Seata原理实现/执行流程/生命周期
    <<<Seata-TM执行时突然宕机了会造成什么问题
    <<<Seata-核心源码分析
    <<<Seata与Lcn的区别

    相关文章

      网友评论

        本文标题:SpringBoot整合Seata

        本文链接:https://www.haomeiwen.com/subject/yflrwltx.html