Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。本教程旨在为读者提供一个快速入门seata的案例,详细使用请参考官方案例和文档。

seata-server搭建

在seata中,事务管理器是单独的一个服务,无需读者做二次开发,开箱即用。下载地址https://github.com/seata/seata/releases 。本文案例中使用2.1.0这个版本。下载完成并解压后,需要对seata-server进行配置,需要配置conf目录下的file.conf和registry.conf。

其中file.conf是配置seata-server的数据存储方式,支持本地文档和数据库,本文直接使用本地文件存储。配置如下:

## transaction log store, only used in seata-serverstore {  ## store mode: file、db  mode = "file"  ## file store property  file {    ## store location dir    dir = "sessionStore"    # branch session size , if exceeded first try compress lockkey, still exceeded throws exceptions    maxBranchSessionSize = 16384    # globe session size , if exceeded throws exceptions    maxGlobalSessionSize = 512    # file buffer size , if exceeded allocate new buffer    fileWriteBufferCacheSize = 16384    # when recover batch read size    sessionReloadReadSize = 100    # async, sync    flushDiskMode = async  }  ## database store property  db {    ## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp) etc.    datasource = "druid"    ## mysql/oracle/postgresql/h2/oceanbase etc.    dbType = "mysql"    driverClassName = "com.mysql.jdbc.Driver"    url = "jdbc:mysql://127.0.0.1:3306/seata"    user = "mysql"    password = "mysql"    minConn = 5    maxConn = 30    globalTable = "global_table"    branchTable = "branch_table"    lockTable = "lock_table"    queryLimit = 100    maxWait = 5000  }}

registry.conf是配置seata-server的注册中心的,本文案例注册到eureka上。

registry {  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa  type = "eureka"  nacos {    application = "seata-server"    serverAddr = "localhost"    namespace = ""    cluster = "default"    username = ""    password = ""  }  eureka {    serviceUrl = "http://localhost:8761/eureka"    application = "default"    weight = "1"  }    ... }

业务代码初始化

去官网下载代码,也可以到本文整理出来的案例,下载地址:https://github.com/forezp/distributed-lab/tree/master/seata-sample

项目介绍

下载完成后,项目工程的文件目录如下,一共有5个工程,分别为eureka(注册中心)、business(交易发生的服务)、storage(库存服务)、order(订单服务)、account(账户服务),其中seata-server和另外四个业务服务都需要向eureka注册。sql目录为初始化sql的脚本。项目的目录结构如下。

seata-sample├── account├── bussiness├── eureka├── order├── pom.xml├── sql└── storage

初始化sql

在数据库中创建seata的数据库,并导入在sql目录下的数据库脚本。

配置更改

在业务代码中引入seata的sdk后,需要配置file.conf和registry.conf,请查看源码中的代码。在application.properties中配置mysql的连接:

spring.cloud.alibaba.seata.tx-service-group=my_test_tx_groupspring.datasource.url=jdbc:mysql://127.0.0.1:3306/seatatest?useSSL=false&serverTimezone=UTCspring.datasource.username=rootspring.datasource.password=123456

启动工程

依次启动seata-server,euraka,business,storage,order,account工程。访问eureka的地址:http://localhost:8761/ ,可以见到服务都向eureka注册。

在启动business服务时,会向数据库插入以下的数据:

 @PostConstruct    public void initData() {        jdbcTemplate.update("delete from account_tbl");        jdbcTemplate.update("delete from order_tbl");        jdbcTemplate.update("delete from storage_tbl");        jdbcTemplate.update("insert into account_tbl(user_id,money) values('U100000','10000') ");        jdbcTemplate.update("insert into storage_tbl(commodity_code,count) values('C100000','200') ");    }

测试

seata官方已经将代码逻辑写好了,直接测试即可。

curl http://127.0.0.1:8084/purchase/commit

此接口代码逻辑如下:

 @RequestMapping(value = "/purchase/commit", produces = "application/json")    public String purchaseCommit() {        try {            businessService.purchase("U100000", "C100000", 30);        } catch (Exception exx) {            return exx.getMessage();        }        return "全局事务提交";    }

即买30个库存,当前库存、金额都够,所以交易正常进行。

完成后可以看到数据库中 account_tbl的id为1的money会减少 5,order_tbl中会新增一条记录,storage_tbl的id为1的count字段减少 1

2020-05-21 16:09:12.388 INFO [AsyncCommitting_1]io.seata.server.coordinator.DefaultCore.doGlobalCommit:240 -Committing global transaction is successfully done, xid = 10.66.40.141:8091:2012236512.

发生异常事务回滚

调用如下的接口:

curl http://127.0.0.1:8084/purchase/rollback

此接口代码逻辑如下:

@RequestMapping("/purchase/rollback")    public String purchaseRollback() {        try {            businessService.purchase("U100000", "C100000", 99999);        } catch (Exception exx) {            return exx.getMessage();        }        return "全局事务提交";    }

此接口先扣掉了库存,然后扣掉了钱,最后查询数据库,发现数据库的库存为负数,于是抛出异常,发生回滚,待完成后数据库中的数据没有发生变化,回滚成功。可见分布式事务回滚操作成功。

参考资料

http://seata.io/zh-cn/docs/overview/what-is-seata.html

druid seata 配置_五分钟体验分布式事务框架Seata相关推荐

  1. 五分钟体验分布式事务框架Seata

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单 ...

  2. druid seata 配置_五分钟带你了解Seata分布式事务

    1.Seata介绍 Seata是由阿里中间件团队发起的开源项目 Fescar,后更名为Seata,它是一个是开源的分布式事务框架. 传统2PC的问题在Seata中得到了解决,它通过对本地关系数据库的分 ...

  3. seata xid是什么_阿里开源的分布式事务框架 Seata

    1. Seata 概述 Seata 是 Simple Extensible Autonomous Transaction Architecture 的简写,由 feascar 改名而来. Seata ...

  4. 五分钟体验分布式调度框架xxl-job

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速. ...

  5. 分布式事务框架seata介绍

    分布式事务框架seata介绍 一 . 事务特性(ACID) 1.原子性(A) 在整个事务中的所有操作,要么全部完成,要么全部不做,没有中间状态.对于事务在执行中发生错误,所有的操作都会被回滚,整个事务 ...

  6. 分布式事务——分布式事务简介、分布式事务框架 Seata(AT模式、Tcc模式、Tcc Vs AT)、分布式事务—MQ

    分布式事务--分布式事务简介.分布式事务框架 Seata(AT模式.Tcc模式.Tcc Vs AT).分布式事务--MQ 一.分布式事务简介 如果不是分布式环境的话一般不会接触到这种,一旦是微服务这种 ...

  7. 分布式事务框架Seata

    分布式事务框架Seata     sei达 一. 分布式事务前言 1. 数据库管理系统中事务(transaction)的四个特性:简称ACID(这种特性简称刚性事物) 原子性(Atomicity):原 ...

  8. 阿里开源一站式分布式事务框架seata源码分析(AT模式下TM与RM分析)

    序言: 对于阿里开源分布式事务框架seata的详细了解可以参考官网,这里不会详细介绍.本章只会介绍seata中AT模式的源码分析(对阿seata有一定了解或者成功完成过demo). seata中一个事 ...

  9. 老板现在喊我大哥,原因是我用阿里分布式事务框架Seata解决了长久以来困扰公司的分布式事务问题

    大家好,我是曹尼玛 从大学毕业5年,一直努力学习,努力工作,追求新技术,不保守. 上个月我来到一家新公司上班,月薪20K,这家公司老板人很好,对员工很关爱,公司氛围不错,同事们也努力把公司项目搞搞好. ...

最新文章

  1. Django博客系统工程创建和配置
  2. 八十八、CSS两列三列的布局方式
  3. 2016年第七届蓝桥杯C/C++ A组国赛 —— 第三题:打靶
  4. 算法与数据结构——并查集
  5. 友元关系可以继承_私生子也有继承权!非婚生子女的继承关系如何认定?
  6. mysql锁与程序锁_sql 锁类型与锁机制
  7. 多线程的那点儿事(之无锁队列)
  8. hdu 6437 Videos 最小费用最大流
  9. b站up粉丝数量及变化爬取,并保存成txt文件
  10. 超精细写实的3D人物模型,这可不是照片!
  11. 主机MTU值和Docker MTU值不一致导致Harbor无法推送问题
  12. 敏捷交付_确保敏捷交付
  13. java零钱换整程序_Leetcode 322. 零钱兑换
  14. stl文件转stp (二次开发)
  15. android 摇晃工具箱
  16. 关于打开Excel显示受保护视图空白无内容的问题已解决
  17. Android源码目录结构分析
  18. android手机几大厂商排行榜,各大手机厂商的核心产品UI排行榜出炉
  19. Word2003文档中字数统计在哪?
  20. 使用office2013编辑html,office2013软件同时支持多个文档编辑

热门文章

  1. pycharm多光标设置
  2. 大神们请看python日期是这样转换的
  3. 科技下的仓库,数据库
  4. [论文笔记] Anatomy of a crowdsourcing platform - Using the example of microworkers.com (IMIS, 2011)...
  5. numpy一维数组的反转/倒序
  6. Windows下以Local模式调试SparkStreaming的WordCount例子
  7. 「BZOJ 2342」「SHOI 2011」双倍回文「Manacher」
  8. Windows安装MongoDB
  9. Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4) C. Connect Three 【模拟】...
  10. springboot 在配置文件写参数注入到类中