千家信息网

alibaba seata服务端如何实现

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章给大家分享的是有关alibaba seata服务端如何实现的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。seata是什么?seata是来处理分布式服务之间互相调用的
千家信息网最后更新 2026年11月03日alibaba seata服务端如何实现

这篇文章给大家分享的是有关alibaba seata服务端如何实现的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

seata是什么?

seata是来处理分布式服务之间互相调用的事务问题。

Seata术语

TC (Transaction Coordinator) - 事务协调者

维护全局和分支事务的状态,驱动全局事务提交或回滚。

TM (Transaction Manager) - 事务管理器

定义全局事务的范围:开始全局事务、提交或回滚全局事务。

RM (Resource Manager) - 资源管理器

管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

seata中文文档:Seata 是什么

seata下载地址:https://github.com/seata/seata/releases

seata服务端具体实现

我下载的是1.3.0

解压后目录结构

修改配置文件:registry.conf 注册信息。type默认是file,我要注册到nacos,修改nacos配置信息。

registry {  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa  type = "nacos"   nacos {    application = "seata-server"    serverAddr = "127.0.0.1:3333"    group = "SEATA_GROUP"    namespace = ""    cluster = "default"    username = "nacos"    password = "nacos"  }  eureka {    serviceUrl = "http://localhost:8761/eureka"    application = "default"    weight = "1"  }  redis {    serverAddr = "localhost:6379"    db = 0    password = ""    cluster = "default"    timeout = 0  }  zk {    cluster = "default"    serverAddr = "127.0.0.1:2181"    sessionTimeout = 6000    connectTimeout = 2000    username = ""    password = ""  }  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 = "127.0.0.1:8848"    namespace = ""    group = "SEATA_GROUP"    username = ""    password = ""  }  consul {    serverAddr = "127.0.0.1:8500"  }  apollo {    appId = "seata-server"    apolloMeta = "http://192.168.1.204:8801"    namespace = "application"  }  zk {    serverAddr = "127.0.0.1:2181"    sessionTimeout = 6000    connectTimeout = 2000    username = ""    password = ""  }  etcd3 {    serverAddr = "http://localhost:2379"  }  file {    name = "file.conf"  }}

file.conf配置数据库信息,这里我配置的是db。要新建数据库。添加四张表。

branch_table、global_table、lock_table、undo_log。1.3.0版本没有给我们sql。其它版本有sql写在下面

## transaction log store, only used in seata-serverstore {  ## store mode: file、db、redis  mode = "db"   ## 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)/HikariDataSource(hikari) etc.    datasource = "druid"    ## mysql/oracle/postgresql/h3/oceanbase etc.    dbType = "mysql"    driverClassName = "com.mysql.cj.jdbc.Driver"    url = "jdbc:mysql://127.0.0.1:3306/seata?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8"    user = "root"    password = "123456"    minConn = 5    maxConn = 30    globalTable = "global_table"    branchTable = "branch_table"    lockTable = "lock_table"    queryLimit = 100    maxWait = 5000  }   ## redis store property  redis {    host = "127.0.0.1"    port = "6379"    password = ""    database = "0"    minConn = 1    maxConn = 10    queryLimit = 100  } }

sql

SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0; -- ------------------------------ Table structure for branch_table-- ----------------------------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) DEFAULT NULL,  `resource_group_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,  `resource_id` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,  `branch_type` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,  `status` tinyint(4) DEFAULT NULL,  `client_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,  `application_data` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,  `gmt_create` datetime(6) DEFAULT NULL,  `gmt_modified` datetime(6) 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; -- ------------------------------ 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) DEFAULT NULL,  `status` tinyint(4) NOT NULL,  `application_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,  `transaction_service_group` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,  `transaction_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,  `timeout` int(11) DEFAULT NULL,  `begin_time` bigint(20) DEFAULT NULL,  `application_data` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,  `gmt_create` datetime(0) DEFAULT NULL,  `gmt_modified` datetime(0) 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; -- ------------------------------ 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 DEFAULT NULL,  `transaction_id` bigint(20) DEFAULT NULL,  `branch_id` bigint(20) NOT NULL,  `resource_id` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,  `table_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,  `pk` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,  `gmt_create` datetime(0) DEFAULT NULL,  `gmt_modified` datetime(0) 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; -- ------------------------------ 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 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; SET FOREIGN_KEY_CHECKS = 1;

启动你自己的nacos注册中心。

然后在bin目录下双击seata-server.bat文件启动。

查看nacos注册中心,发现有seata的服务,就表示成功了。

seata客户端

pom文件

    4.0.0            spring-cloud-demo        com.xx.job        1.0-SNAPSHOT         seata-order-service2001            1.8                            com.xx.job            cloud-common            ${project.version}                    mysql            mysql-connector-java            org.mybatis.spring.boot            mybatis-spring-boot-starter            2.0.0            org.springframework.boot            spring-boot-starter-data-jpa            com.alibaba            druid            spring-boot-starter-web            spring-boot-starter-test            test            junit            junit            4.11            spring-boot-starter-actuator            com.alibaba.cloud            spring-cloud-starter-alibaba-nacos-discovery            spring-cloud-starter-alibaba-nacos-config            org.springframework.cloud            spring-cloud-starter-openfeign            io.seata            seata-all            org.projectlombok            lombok                                            org.springframework.boot                spring-boot-maven-plugin                            org.apache.maven.plugins                maven-compiler-plugin                                    6                    6                            

yml文件

server:  port: 2001 spring:  application:    name: seata-order-service  cloud:    nacos:      discovery:        server-addr: 127.0.0.1:3333      config:        file-extension: yml  datasource:    driver-class-name: com.mysql.cj.jdbc.Driver    url: jdbc:mysql://127.0.0.1:3306/order?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8    username: root    password: 123456    type: com.alibaba.druid.pool.DruidDataSourcemybatis:  type-aliases-package: com.xx.job.entity  mapper-locations: classpath:mapper/*.xml#====================================Seata Config===============================================seata:  enabled: true  application-id: account-seata-example  tx-service-group: account-service-seata-service-group # 事务群组(可以每个应用独立取名,也可以使用相同的名字)  client:    rm-report-success-enable: true    rm-table-meta-check-enable: false # 自动刷新缓存中的表结构(默认false)    rm-report-retry-count: 5 # 一阶段结果上报TC重试次数(默认5)    rm-async-commit-buffer-limit: 10000 # 异步提交缓存队列长度(默认10000)    rm:      lock:        lock-retry-internal: 10 # 校验或占用全局锁重试间隔(默认10ms)        lock-retry-times: 30 # 校验或占用全局锁重试次数(默认30)        lock-retry-policy-branch-rollback-on-conflict: true # 分支事务与其它全局回滚事务冲突时锁策略(优先释放本地锁让回滚成功)    tm-commit-retry-count: 3 # 一阶段全局提交结果上报TC重试次数(默认1次,建议大于1)    tm-rollback-retry-count: 3 # 一阶段全局回滚结果上报TC重试次数(默认1次,建议大于1)    undo:      undo-data-validation: true # 二阶段回滚镜像校验(默认true开启)      undo-log-serialization: jackson # undo序列化方式(默认jackson)      undo-log-table: undo_log  # 自定义undo表名(默认undo_log)    log:      exceptionRate: 100 # 日志异常输出概率(默认100)    support:      spring:        datasource-autoproxy: true  service:    vgroup-mapping:      my_test_tx_group: default # TC 集群(必须与seata-server保持一致)    enable-degrade: false # 降级开关    disable-global-transaction: false # 禁用全局事务(默认false)    grouplist:      default: 127.0.0.1:8091  transport:    shutdown:      wait: 3    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    type: TCP    server: NIO    heartbeat: true    serialization: seata    compressor: none    enable-client-batch-send-request: true # 客户端事务消息请求是否批量合并发送(默认true)  registry:    file:      name: file.conf    type: nacos      server-addr: localhost:3333      namespace:      cluster: default  config:

业务代码需要加上两个注解,本地事物和分布式事物。

@Transactional@GlobalTransactional
package com.xx.job.seataorderservice2001.controller; import com.xx.job.common.CommonResult;import com.xx.job.entity.Account;import com.xx.job.entity.Order;import com.xx.job.entity.Storage;import com.xx.job.seataorderservice2001.service.AccountService;import com.xx.job.seataorderservice2001.service.OrderService;import com.xx.job.seataorderservice2001.service.StorageSerivce;import io.seata.spring.annotation.GlobalTransactional;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.transaction.annotation.Transactional;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@Slf4j@RestControllerpublic class OrderController {    @Autowired    private OrderService orderService;    private AccountService accountService;    private StorageSerivce storageSerivce;    /**     * 加订单 减余额 减库存     * @param order     * @return     */    @Transactional    @GlobalTransactional    @RequestMapping("/order/create")    public CommonResult create(Order order){        // 加订单        orderService.create(order);        // 减余额        Account account = new Account();        account.setUserId(order.getUserId());        account.setMoney(80);        accountService.update(account);        // 减库存        Storage storage = new Storage();        storage.setCount(999);        storage.setCommodityCode(order.getCommodityCode());        storageSerivce.update(storage);        return new CommonResult(200,"添加订单成功!");    }}

感谢各位的阅读!关于"alibaba seata服务端如何实现"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

事务 全局 分支 服务 文件 次数 阶段 配置 成功 信息 结果 订单 管理 事物 余额 内容 分布式 客户 客户端 库存 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司简介 科技互联网企业 互联网科技垄断 腾讯阿里互联网科技 融势互联网科技 深圳天众互联网科技公司 科技伦理 互联网公司 苏州五指互联网络科技有限 花神(南京)互联网科技有限公司 浙南科技城互联网大厦建设工程 科技互联网海报 广州富喜互联网络科技 卡尔迅互联网科技有限公司 广州燕处互联网科技有限公司 广东鹅鹅鹅互联网科技有限公司 抖集互联网科技技术咨询 普陀区互联网教育科技管理办法 互联网科技平台产品运营 易租星互联网科技有限公司 广东猫王互联网科技有限公司电话 互联网科技名片 中资互联网科技 科技互联网公司logo 美国互联网前沿科技 湖南洣水互联网科技有限公司扣款 厦门比较好的科技互联网公司 玉溪互联网科技怎么选 成都互联网科技公司工作好不好 高科技互联网发展前景如何 青岛易易互联网科技
0