一、背景
阿里给出了Seata的官方示例,地址: https://github.com/seata/seata-samples, 提供了很多示例:
- springcloud-seata-sharding-jdbc-mybatis-plus-samplesEasy to understand, high availability,Integration example of Spring Cloud,Seata,ShardingJdbc,MyBatisPlus.
- spring-cloud-alibaba-samples - Spring Cloud Alibaba + Nacos + Dubbo + OpenFeign + Sentinel + Seata
- dubbo - Integration example of Seata and Apache Dubbo
- springboot - Integration example of Seata and Spring Boot
- nacos - Integration example of Seata、 Apache Dubbo and Alibaba Nacos
- springboot-dubbo-seata - Integration example of Seata、 Apache Dubbo and Spring Boot
- nutzboot-dubbo-seata - Integration example of Seata、 Apache Dubbo and NutzBoot
- springcloud-jpa-seata - Integration example of Seata and Spring Cloud and JPA
- spring-boot-multiple-datasource - Integration example of Seata and Spring Boot with multiple datasource and MyBatis
- springboot-mybatis - Integration example of Seata and Spring Boot and Mybatis
- api - Non-Spring environment uses api to build Seata distributed transactions
- spring-boot-multiple-datasource-mybatis-plus - Integration example of Seata and Spring Boot with multiple datasource and MyBatisPlus
- springcloud-nacos-seata - Integration example of Seata and Spring Cloud and Alibaba Nacos
- saga - Saga mode distributed transaction demo projects
- dubbo-multiple-datasource-mybatis-plus Integration example of Seata and Spring Boot Apache Dubbo with dynamic multiple datasource and MyBatisPlus and Alibaba Nacos
本文以springboot-mybatis为例,该示例中有5个module:
- sbm-account-service
- sbm-business-service
- sbm-common-service
- sbm-order-service
- sbm-storage-service
二、环境部署
2.1 mysql DB建表
示例中提供了mysql的建表语句,位置:seata-samples/springboot-mybatis/sql/all_in_one.sql
建了3个DB, 详情如下:
| db | table1 | table2 | 
| db_account | account_tbl | undo_lob | 
| db_order | order_tbl | undo_lob | 
| db_stock | stock_tbl | undo_lob | 
2.2 Seata-Server 下载
官网下载:http://seata.io/zh-cn/blog/download.html

2.3 Seata-Server 配置
/conf/application.yml, seata3个节点(config、register、store)有多重配置方式,为了简单演示,这里采用默认file方式,其他方式可以参考application.example.yml
seata:
  config:
    # support: nacos, consul, apollo, zk, etcd3
    type: file
  registry:
    # support: nacos, eureka, redis, zk, consul, etcd3, sofa
    type: file
  store:
    # support: file 、 db 、 redis
    mode: file2.4 Seata-Server 启动
sh /bin/seata-server.sh
启动日志:seata/logs/start.out

main] i.s.core.rpc.netty.NettyServerBootstrap : Server started, service listen port: 8091
默认启动接口:8091
三、服务启动
分别启动4个服务,启动端口分别为:
| server | port | 
| sbm-account-service | 8083 | 
| sbm-order-service | 8082 | 
| sbm-stock-service | 8081 | 
| sbm-business-service | 8084 | 
四、测试
测试服务位置:sbm-business-service/src/main/java/io/seata/samples/business/controller/BusinessController.java
/**
     * 购买下单,模拟全局事务提交
     *
     * @return
     */
    @RequestMapping("/purchase/commit")
    public Boolean purchaseCommit(HttpServletRequest request) {
        businessService.purchase("1001", "2001", 1);
        return true;
    }
    /**
     * 购买下单,模拟全局事务回滚
     *
     * @return
     */
    @RequestMapping("/purchase/rollback")
    public Boolean purchaseRollback() {
        try {
            businessService.purchase("1002", "2001", 1);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }4.1 正常提交
http://localhost:8084/api/business/purchase/commit

4.2 异常提交
http://localhost:8084/api/business/purchase/rollback

 

    
    










