温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

SpringCloud-Alibaba-Seata中的分布式事务是什么

发布时间:2020-12-16 16:05:26 来源:亿速云 阅读:253 作者:Leah 栏目:开发技术

本篇文章给大家分享的是有关SpringCloud-Alibaba-Seata中的分布式事务是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

前言
Seata 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。

术语

TC (Transaction Coordinator) - 事务协调者
维护全局和分支事务的状态,驱动全局事务提交或回滚。

TM (Transaction Manager) - 事务管理器
定义全局事务的范围:开始全局事务、提交或回滚全局事务。

RM (Resource Manager) - 资源管理器
管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
1.
XID:全局唯一事务ID
TC:事务协调器,维护全局事务的运行状态,负责协调并驱动全局的提交或回滚
TM:控制全局事务的边界,负责开启一全局事务,并最终发起全局提交或者回滚的决议
RM:控制分支事务,负责分支注册,状态汇报,并接受事务协调的指令,驱动分支的事务提交或者回滚
2.
TM向TC申请开启一个全局的事务,全局事务创建成功并生成一个唯一的全局ID,XID在微服务调用链路的上下文中传播
RM向TC注册分支事务,将其纳入XID对应事务的 管辖
TM向TC发起针对XID的全局提交或者回滚
TC调度XID下管辖的全部分支事务完成提交或者回滚

SpringCloud-Alibaba-Seata中的分布式事务是什么

官方文档https://seata.io/zh-cn/docs/overview/what-is-seata.html

示例 win版
下载安装
https://github.com/seata/seata/releases/tag/v1.3.0

SpringCloud-Alibaba-Seata中的分布式事务是什么

下载好的包解压 解压
SpringCloud-Alibaba-Seata中的分布式事务是什么
配置 seata
打开\seata\seata\conf 下编辑 file.conf文件
SpringCloud-Alibaba-Seata中的分布式事务是什么
修改数据库模式
SpringCloud-Alibaba-Seata中的分布式事务是什么
file.conf 文件修改链接数据的 信息
修改本地mysql的地址与账号密码
SpringCloud-Alibaba-Seata中的分布式事务是什么
file.conf 中的service也没有手动添加
vgroup_mapping.my_test_tx_group = “default”
default任意定义名字

service {  #transaction service group mapping  #修改,可不改,my_test_tx_grou。  vgroup_mapping.my_test_tx_group = "default"  #only support when registry.type=file, please don't set multiple addresses  # 此服务的地址  default.grouplist = "127.0.0.1:8091"  #disable seata  disableGlobalTransaction = false }

创建数据库 运行官方给的额Sql文件
我草!没有sql脚本, 0.9版本有sql脚本
网上找了一个

DROP TABLE IF EXISTS `branch_table`; CREATE TABLE `branch_table` (  `branch_id` bigint(20) NOT NULL,  `xid` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,  `transaction_id` bigint(20) NULL DEFAULT NULL,  `resource_group_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,  `resource_id` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,  `branch_type` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,  `status` tinyint(4) NULL DEFAULT NULL,  `client_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,  `application_data` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,  `gmt_create` datetime(6) NULL DEFAULT NULL,  `gmt_modified` datetime(6) NULL DEFAULT NULL,  PRIMARY KEY (`branch_id`) USING BTREE,  INDEX `idx_xid`(`xid`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of branch_table -- ---------------------------- -- ---------------------------- -- Table structure for global_table -- ---------------------------- DROP TABLE IF EXISTS `global_table`; CREATE TABLE `global_table` (  `xid` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,  `transaction_id` bigint(20) NULL DEFAULT NULL,  `status` tinyint(4) NOT NULL,  `application_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,  `transaction_service_group` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,  `transaction_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,  `timeout` int(11) NULL DEFAULT NULL,  `begin_time` bigint(20) NULL DEFAULT NULL,  `application_data` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,  `gmt_create` datetime(0) NULL DEFAULT NULL,  `gmt_modified` datetime(0) NULL DEFAULT NULL,  PRIMARY KEY (`xid`) USING BTREE,  INDEX `idx_gmt_modified_status`(`gmt_modified`, `status`) USING BTREE,  INDEX `idx_transaction_id`(`transaction_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of global_table -- ---------------------------- -- ---------------------------- -- Table structure for lock_table -- ---------------------------- DROP TABLE IF EXISTS `lock_table`; CREATE TABLE `lock_table` (  `row_key` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,  `xid` varchar(96) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,  `transaction_id` bigint(20) NULL DEFAULT NULL,  `branch_id` bigint(20) NOT NULL,  `resource_id` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,  `table_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,  `pk` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,  `gmt_create` datetime(0) NULL DEFAULT NULL,  `gmt_modified` datetime(0) NULL DEFAULT NULL,  PRIMARY KEY (`row_key`) USING BTREE,  INDEX `idx_branch_id`(`branch_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of lock_table -- ---------------------------- -- ---------------------------- -- Table structure for undo_log -- ---------------------------- DROP TABLE IF EXISTS `undo_log`; CREATE TABLE `undo_log` (  `id` bigint(20) NOT NULL AUTO_INCREMENT,  `branch_id` bigint(20) NOT NULL,  `xid` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,  `context` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,  `rollback_info` longblob NOT NULL,  `log_status` int(11) NOT NULL,  `log_created` datetime(0) NOT NULL,  `log_modified` datetime(0) NOT NULL,  `ext` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,  PRIMARY KEY (`id`) USING BTREE,  UNIQUE INDEX `ux_undo_log`(`xid`, `branch_id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

修改conf文件夹下 registry.conf ,
seata 支持注册nacos 、eureka、redis、zk、consul、etcd3、sofa
本地的nacos的地址
SpringCloud-Alibaba-Seata中的分布式事务是什么
改完配置文件保存 测试
启动ncos 在启动seata
SpringCloud-Alibaba-Seata中的分布式事务是什么
Seata 下bin目录SpringCloud-Alibaba-Seata中的分布式事务是什么

SpringCloud-Alibaba-Seata中的分布式事务是什么
SpringCloud-Alibaba-Seata中的分布式事务是什么
代码示例
pom

<dependency>    <groupId>com.alibaba.cloud</groupId>    <artifactId>spring-cloud-starter-alibaba-seata</artifactId>    <exclusions>     <exclusion>      <artifactId>seata-all</artifactId>      <groupId>io.seata</groupId>     </exclusion>    </exclusions>   </dependency>   <dependency>    <groupId>io.seata</groupId>    <artifactId>seata-all</artifactId>    <version>1.3.0</version>   </dependency>

使用库下创建`undo_log表

drop table `undo_log`; CREATE TABLE `undo_log` (  `id` bigint(20) NOT NULL AUTO_INCREMENT,  `branch_id` bigint(20) NOT NULL,  `xid` varchar(100) NOT NULL,  `context` varchar(128) NOT NULL,  `rollback_info` longblob NOT NULL,  `log_status` int(11) NOT NULL,  `log_created` datetime NOT NULL,  `log_modified` datetime NOT NULL,  `ext` varchar(100) DEFAULT NULL,  PRIMARY KEY (`id`),  UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

yml

server:  port: 2001   spring:  application:  name: seata-order-service  cloud:  alibaba:   seata:   #自定义事务组名称需要与seata-server中的对应   tx-service-group: default  nacos:   discovery:   server-addr: localhost:8848  datasource:  driver-class-name: com.mysql.jdbc.Driver  url: jdbc:mysql://localhost:3306/seata_order  username: root  password: root   feign:  hystrix:  enabled: false   logging:  level:  io:   seata: info   mybatis:  mapperLocations: classpath:mapper/*.xml

file.conf

transport {  # tcp udt unix-domain-socket  type = "TCP"  #NIO NATIVE  server = "NIO"  #enable heartbeat  heartbeat = true  #thread factory for netty  thread-factory {  boss-thread-prefix = "NettyBoss"  worker-thread-prefix = "NettyServerNIOWorker"  server-executor-thread-prefix = "NettyServerBizHandler"  share-boss-worker = false  client-selector-thread-prefix = "NettyClientSelector"  client-selector-thread-size = 1  client-worker-thread-prefix = "NettyClientWorkerThread"  # netty boss thread size,will not be used for UDT  boss-thread-size = 1  #auto default pin or 8  worker-thread-size = 8  }  shutdown {  # when destroy server, wait seconds  wait = 3  }  serialization = "seata"  compressor = "none" }   service {    vgroup_mapping.fsp_tx_group = "default"     default.grouplist = "127.0.0.1:8091"  enableDegrade = false  disable = false  max.commit.retry.timeout = "-1"  max.rollback.retry.timeout = "-1"  disableGlobalTransaction = false }     client {  async.commit.buffer.limit = 10000  lock {  retry.internal = 10  retry.times = 30  }  report.retry.count = 5  tm.commit.retry.count = 1  tm.rollback.retry.count = 1 }   ## transaction log store store {  ## store mode: file、db  mode = "db"    ## file store  file {  dir = "sessionStore"    # branch session size , if exceeded first try compress lockkey, still exceeded throws exceptions  max-branch-session-size = 16384  # globe session size , if exceeded throws exceptions  max-global-session-size = 512  # file buffer size , if exceeded allocate new buffer  file-write-buffer-cache-size = 16384  # when recover batch read size  session.reload.read_size = 100  # async, sync  flush-disk-mode = async  }    ## database store  db {  ## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp) etc.  datasource = "dbcp"  ## mysql/oracle/h3/oceanbase etc.  db-type = "mysql"  driver-class-name = "com.mysql.jdbc.Driver"  url = "jdbc:mysql://127.0.0.1:3306/seata"  user = "root"  password = "root"  min-conn = 1  max-conn = 3  global.table = "global_table"  branch.table = "branch_table"  lock-table = "lock_table"  query-limit = 100  } } lock {  ## the lock store mode: local、remote  mode = "remote"    local {  ## store locks in user's database  }    remote {  ## store locks in the seata's server  } } recovery {  #schedule committing retry period in milliseconds  committing-retry-period = 1000  #schedule asyn committing retry period in milliseconds  asyn-committing-retry-period = 1000  #schedule rollbacking retry period in milliseconds  rollbacking-retry-period = 1000  #schedule timeout retry period in milliseconds  timeout-retry-period = 1000 }   transaction {  undo.data.validation = true  undo.log.serialization = "jackson"  undo.log.save.days = 7  #schedule delete expired undo_log in milliseconds  undo.log.delete.period = 86400000  undo.log.table = "undo_log" }   ## metrics settings metrics {  enabled = false  registry-type = "compact"  # multi exporters use comma divided  exporter-list = "prometheus"  exporter-prometheus-port = 9898 }   support {  ## spring  spring {  # auto proxy the DataSource bean  datasource.autoproxy = false  } }

registry.conf

registry {  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa  type = "nacos"    nacos {  serverAddr = "localhost:8848"  namespace = ""  cluster = "default"  }  eureka {  serviceUrl = "http://localhost:8761/eureka"  application = "default"  weight = "1"  }  redis {  serverAddr = "localhost:6379"  db = "0"  }  zk {  cluster = "default"  serverAddr = "127.0.0.1:2181"  session.timeout = 6000  connect.timeout = 2000  }  consul {  cluster = "default"  serverAddr = "127.0.0.1:8500"  }  etcd3 {  cluster = "default"  serverAddr = "http://localhost:2379"  }  sofa {  serverAddr = "127.0.0.1:9603"  application = "default"  region = "DEFAULT_ZONE"  datacenter = "DefaultDataCenter"  cluster = "default"  group = "SEATA_GROUP"  addressWaitTime = "3000"  }  file {  name = "file.conf"  } }   config {  # file、nacos 、apollo、zk、consul、etcd3  type = "file"    nacos {  serverAddr = "localhost"  namespace = ""  }  consul {  serverAddr = "127.0.0.1:8500"  }  apollo {  app.id = "seata-server"  apollo.meta = "http://192.168.1.204:8801"  }  zk {  serverAddr = "127.0.0.1:2181"  session.timeout = 6000  connect.timeout = 2000  }  etcd3 {  serverAddr = "http://localhost:2379"  }  file {  name = "file.conf"  } }
@GlobalTransactional(name = "tang,rollbackFor = Exception.class)开启全局事物
@Override  @GlobalTransactional(name = "tang,rollbackFor = Exception.class)  public void create(Providers providers ){   test1Mapper.add(providers);   test2Mapper.add(providers)   }

以上就是SpringCloud-Alibaba-Seata中的分布式事务是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI