首页 > 其他分享 >seata nacos spring cloud

seata nacos spring cloud

时间:2024-03-13 10:32:47浏览次数:20  
标签:INFO 03 http seata exec spring 2024 cloud nio

目录

概述

seata 1.8.0 版本,针对 spring cloud alibaba feign 应用。

实践

seata-server 所需表

在这里插入图片描述

建 ry-seata 库,以下四张表

-- -------------------------------- The script used when storeMode is 'db' --------------------------------
-- the table to store GlobalSession data
CREATE TABLE IF NOT EXISTS `global_table`
(
    `xid`                       VARCHAR(128) NOT NULL,
    `transaction_id`            BIGINT,
    `status`                    TINYINT      NOT NULL,
    `application_id`            VARCHAR(32),
    `transaction_service_group` VARCHAR(32),
    `transaction_name`          VARCHAR(128),
    `timeout`                   INT,
    `begin_time`                BIGINT,
    `application_data`          VARCHAR(2000),
    `gmt_create`                DATETIME,
    `gmt_modified`              DATETIME,
    PRIMARY KEY (`xid`),
    KEY `idx_status_gmt_modified` (`status` , `gmt_modified`),
    KEY `idx_transaction_id` (`transaction_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;

-- the table to store BranchSession data
CREATE TABLE IF NOT EXISTS `branch_table`
(
    `branch_id`         BIGINT       NOT NULL,
    `xid`               VARCHAR(128) NOT NULL,
    `transaction_id`    BIGINT,
    `resource_group_id` VARCHAR(32),
    `resource_id`       VARCHAR(256),
    `branch_type`       VARCHAR(8),
    `status`            TINYINT,
    `client_id`         VARCHAR(64),
    `application_data`  VARCHAR(2000),
    `gmt_create`        DATETIME(6),
    `gmt_modified`      DATETIME(6),
    PRIMARY KEY (`branch_id`),
    KEY `idx_xid` (`xid`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;

-- the table to store lock data
CREATE TABLE IF NOT EXISTS `lock_table`
(
    `row_key`        VARCHAR(128) NOT NULL,
    `xid`            VARCHAR(128),
    `transaction_id` BIGINT,
    `branch_id`      BIGINT       NOT NULL,
    `resource_id`    VARCHAR(256),
    `table_name`     VARCHAR(32),
    `pk`             VARCHAR(36),
    `status`         TINYINT      NOT NULL DEFAULT '0' COMMENT '0:locked ,1:rollbacking',
    `gmt_create`     DATETIME,
    `gmt_modified`   DATETIME,
    PRIMARY KEY (`row_key`),
    KEY `idx_status` (`status`),
    KEY `idx_branch_id` (`branch_id`),
    KEY `idx_xid` (`xid`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;

CREATE TABLE IF NOT EXISTS `distributed_lock`
(
    `lock_key`       CHAR(20) NOT NULL,
    `lock_value`     VARCHAR(20) NOT NULL,
    `expire`         BIGINT,
    primary key (`lock_key`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;

INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('AsyncCommitting', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryCommitting', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryRollbacking', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('TxTimeoutCheck', ' ', 0);

seata-server 修改配置

server:
  port: 7091

spring:
  application:
    name: seata-server
  datasource:
    dynamic:
      # 开启seata代理
      seata: true

logging:
  config: classpath:logback-spring.xml
  file:
    path: ${log.home:${user.home}/logs/seata}

console:
  user:
    username: seata
    password: seata
seata:
  enabled: true
  config:
    type: nacos
    nacos:
      server-addr: 10.32.36.131:8848
      group: SEATA_GROUP
      namespace:
      dataId: seataServer.properties
      username: nacos
      password: nacos
  registry:
    type: nacos
    nacos:
      application: seata-server
      server-addr: 10.32.36.131:8848
      group : SEATA_GROUP
      namespace:
      username: nacos
      password: nacos
  # 关闭自动代理
  enable-auto-data-source-proxy: false
  # Seata 事务组编号,用于 TC 集群名
  tx-service-group: ruoyi-system-group
  # 服务配置项
  service:
    # 虚拟组和分组的映射
    vgroup-mapping:
      ruoyi-system-group: default

  security:
    secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
    tokenValidityInMilliseconds: 1800000
    ignore:
      urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.jpeg,/**/*.ico,/api/v1/auth/login
sh nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP	
sh nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP	-t 0af6e9(命名空间) -u nacos -w nacos

在这里插入图片描述

seata原理

关键地方如下

seata:
  enabled: true
  tx-service-group: ruoyi-system-group  #要与配置文件中的vgroupMapping一致
  service:
    vgroup-mapping:
      ruoyi-system-group: default

# 原理关键源码打断点 io.seata.discovery.registry.RegistryService#getServiceGroup、io.seata.spring.boot.autoconfigure.SeataCoreAutoConfiguration

问题

在这里插入图片描述

在这里插入图片描述

sh seata-server.sh  -h 10.32.36.131

项目

项目结构如下
在这里插入图片描述

表构建

建表 SQL 如下

# 订单数据库信息 seata_order
DROP DATABASE IF EXISTS seata_order;
CREATE DATABASE seata_order;

DROP TABLE IF EXISTS seata_order.p_order;
CREATE TABLE seata_order.p_order
(
    id               INT(11) NOT NULL AUTO_INCREMENT,
    user_id          INT(11) DEFAULT NULL,
    product_id       INT(11) DEFAULT NULL,
    amount           INT(11) DEFAULT NULL,
    total_price      DOUBLE       DEFAULT NULL,
    status           VARCHAR(100) DEFAULT NULL,
    add_time         DATETIME     DEFAULT CURRENT_TIMESTAMP,
    last_update_time DATETIME     DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8mb4;

DROP TABLE IF EXISTS seata_order.undo_log;
CREATE TABLE seata_order.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,
    PRIMARY KEY (id),
    UNIQUE KEY ux_undo_log (xid, branch_id)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8mb4;

# 产品数据库信息 seata_product
DROP DATABASE IF EXISTS seata_product;
CREATE DATABASE seata_product;

DROP TABLE IF EXISTS seata_product.product;
CREATE TABLE seata_product.product
(
    id               INT(11) NOT NULL AUTO_INCREMENT,
    price            DOUBLE   DEFAULT NULL,
    stock            INT(11) DEFAULT NULL,
    last_update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8mb4;

DROP TABLE IF EXISTS seata_product.undo_log;
CREATE TABLE seata_product.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,
    PRIMARY KEY (id),
    UNIQUE KEY ux_undo_log (xid, branch_id)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8mb4;

INSERT INTO seata_product.product (id, price, stock)
VALUES (1, 10, 20);


# 账户数据库信息 seata_account
DROP DATABASE IF EXISTS seata_account;
CREATE DATABASE seata_account;

DROP TABLE IF EXISTS seata_account.account;
CREATE TABLE seata_account.account
(
    id               INT(11) NOT NULL AUTO_INCREMENT,
    balance          DOUBLE   DEFAULT NULL,
    last_update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8mb4;

DROP TABLE IF EXISTS seata_account.undo_log;
CREATE TABLE seata_account.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,
    PRIMARY KEY (id),
    UNIQUE KEY ux_undo_log (xid, branch_id)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8mb4;
INSERT INTO seata_account.account (id, balance)
VALUES (1, 50);

seata 配置

# seata配置
# 分布式事务配置
seata:
  enabled: true
  enable-auto-data-source-proxy: true #是否开启数据源自动代理,默认为true
  tx-service-group: ruoyi-system-group  #要与配置文件中的vgroupMapping一致
  registry:
    type: nacos
    nacos:
      application: seata-server
      group: SEATA_GROUP
      username: nacos
      password: nacos
      cluster: default
      server-addr: 10.32.36.131:8848
  service:
    vgroup-mapping:
      ruoyi-system-group: default

正常下单

http://localhost:10002/order/placeOrder

{
    "userId": 1,
    "productId": 1,
    "amount": 1
}

order日志

2024-03-12T19:14:31.064 [http-nio-10002-exec-2] INFO  o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet'
2024-03-12T19:14:31.463 [http-nio-10002-exec-2] INFO  i.s.t.TransactionManagerHolder - [<clinit>,40] - TransactionManager Singleton io.seata.tm.DefaultTransactionManager@1cf6c2c9
2024-03-12T19:14:31.478 [http-nio-10002-exec-2] INFO  i.s.t.a.DefaultGlobalTransaction - [begin,117] - Begin new global transaction [10.32.36.131:8091:8043927737756327994]
2024-03-12T19:14:31.498 [http-nio-10002-exec-2] INFO  c.r.o.s.i.OrderServiceImpl - [placeOrder,40] - com.alibaba.druid.pool.DruidDataSource$$EnhancerBySpringCGLIB$$bce05710
2024-03-12T19:14:31.499 [http-nio-10002-exec-2] INFO  c.r.o.s.i.OrderServiceImpl - [placeOrder,41] - =============ORDER START=================
2024-03-12T19:14:31.499 [http-nio-10002-exec-2] INFO  c.r.o.s.i.OrderServiceImpl - [placeOrder,45] - 收到下单请求,用户:1, 商品:1,数量:1
2024-03-12T19:14:31.499 [http-nio-10002-exec-2] INFO  c.r.o.s.i.OrderServiceImpl - [placeOrder,47] - 当前 XID: 10.32.36.131:8091:8043927737756327994
2024-03-12T19:14:31.893 [http-nio-10002-exec-2] INFO  c.r.o.s.i.OrderServiceImpl - [placeOrder,52] - 订单一阶段生成,等待扣库存付款中
2024-03-12T19:14:33.542 [http-nio-10002-exec-2] INFO  c.r.o.s.i.OrderServiceImpl - [placeOrder,61] - 订单已成功下单
2024-03-12T19:14:33.542 [http-nio-10002-exec-2] INFO  c.r.o.s.i.OrderServiceImpl - [placeOrder,62] - =============ORDER END=================
2024-03-12T19:14:33.565 [http-nio-10002-exec-2] INFO  i.s.r.AbstractResourceManager - [branchRegister,73] - branch register success, xid:10.32.36.131:8091:8043927737756327994, branchId:8043927737756328002, lockKeys:p_order:1
2024-03-12T19:14:33.626 [http-nio-10002-exec-2] INFO  i.s.t.a.DefaultGlobalTransaction - [commit,133] - transaction 10.32.36.131:8091:8043927737756327994 will be commit
2024-03-12T19:14:33.643 [http-nio-10002-exec-2] INFO  i.s.t.a.DefaultGlobalTransaction - [suspend,209] - transaction end, xid = 10.32.36.131:8091:8043927737756327994
2024-03-12T19:14:33.643 [http-nio-10002-exec-2] INFO  i.s.t.a.DefaultGlobalTransaction - [commit,155] - [10.32.36.131:8091:8043927737756327994] commit status: Committed
2024-03-12T19:14:34.463 [rpcDispatch_RMROLE_1_1_16] INFO  i.s.c.r.p.c.RmBranchCommitProcessor - [process,56] - rm client handle branch commit process:BranchCommitRequest{xid='10.32.36.131:8091:8043927737756327994', branchId=8043927737756328002, branchType=AT, resourceId='jdbc:mysql://10.32.36.131:3306/seata_order', applicationData='{"autoCommit":false}'}
2024-03-12T19:14:34.465 [rpcDispatch_RMROLE_1_1_16] INFO  i.s.r.AbstractRMHandler - [doBranchCommit,96] - Branch committing: 10.32.36.131:8091:8043927737756327994 8043927737756328002 jdbc:mysql://10.32.36.131:3306/seata_order {"autoCommit":false}
2024-03-12T19:14:34.466 [rpcDispatch_RMROLE_1_1_16] INFO  i.s.r.AbstractRMHandler - [doBranchCommit,104] - Branch commit result: PhaseTwo_Committed

product 日志

2024-03-12T19:14:32.066 [http-nio-10003-exec-1] INFO  o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet'
2024-03-12T19:14:32.212 [http-nio-10003-exec-1] INFO  c.r.p.s.i.ProductServiceImpl - [reduceStock,28] - =============PRODUCT START=================
2024-03-12T19:14:32.212 [http-nio-10003-exec-1] INFO  c.r.p.s.i.ProductServiceImpl - [reduceStock,29] - 当前 XID: 10.32.36.131:8091:8043927737756327994
2024-03-12T19:14:32.339 [http-nio-10003-exec-1] INFO  c.r.p.s.i.ProductServiceImpl - [reduceStock,34] - 商品编号为 1 的库存为20,订单商品数量为1
2024-03-12T19:14:32.340 [http-nio-10003-exec-1] INFO  c.r.p.s.i.ProductServiceImpl - [reduceStock,40] - 开始扣减商品编号为 1 库存,单价商品价格为10.0
2024-03-12T19:14:32.579 [http-nio-10003-exec-1] INFO  c.r.p.s.i.ProductServiceImpl - [reduceStock,46] - 扣减商品编号为 1 库存成功,扣减后库存为19, 1 件商品总价为 10.0 
2024-03-12T19:14:32.579 [http-nio-10003-exec-1] INFO  c.r.p.s.i.ProductServiceImpl - [reduceStock,47] - =============PRODUCT END=================
2024-03-12T19:14:32.608 [http-nio-10003-exec-1] INFO  i.s.r.AbstractResourceManager - [branchRegister,73] - branch register success, xid:10.32.36.131:8091:8043927737756327994, branchId:8043927737756327997, lockKeys:product:1
2024-03-12T19:14:34.425 [rpcDispatch_RMROLE_1_1_16] INFO  i.s.c.r.p.c.RmBranchCommitProcessor - [process,56] - rm client handle branch commit process:BranchCommitRequest{xid='10.32.36.131:8091:8043927737756327994', branchId=8043927737756327997, branchType=AT, resourceId='jdbc:mysql://10.32.36.131:3306/seata_product', applicationData='{"autoCommit":false}'}
2024-03-12T19:14:34.427 [rpcDispatch_RMROLE_1_1_16] INFO  i.s.r.AbstractRMHandler - [doBranchCommit,96] - Branch committing: 10.32.36.131:8091:8043927737756327994 8043927737756327997 jdbc:mysql://10.32.36.131:3306/seata_product {"autoCommit":false}
2024-03-12T19:14:34.428 [rpcDispatch_RMROLE_1_1_16] INFO  i.s.r.AbstractRMHandler - [doBranchCommit,104] - Branch commit result: PhaseTwo_Committed

account 日志

2024-03-12T19:14:32.821 [http-nio-10001-exec-1] INFO  o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet'
2024-03-12T19:14:32.974 [http-nio-10001-exec-1] INFO  c.r.a.s.i.AccountServiceImpl - [reduceBalance,28] - =============ACCOUNT START=================
2024-03-12T19:14:32.975 [http-nio-10001-exec-1] INFO  c.r.a.s.i.AccountServiceImpl - [reduceBalance,29] - 当前 XID: 10.32.36.131:8091:8043927737756327994
2024-03-12T19:14:33.106 [http-nio-10001-exec-1] INFO  c.r.a.s.i.AccountServiceImpl - [reduceBalance,33] - 下单用户1余额为 50.0,商品总价为10.0
2024-03-12T19:14:33.107 [http-nio-10001-exec-1] INFO  c.r.a.s.i.AccountServiceImpl - [reduceBalance,39] - 开始扣减用户 1 余额
2024-03-12T19:14:33.343 [http-nio-10001-exec-1] INFO  c.r.a.s.i.AccountServiceImpl - [reduceBalance,43] - 扣减用户 1 余额成功,扣减后用户账户余额为40.0
2024-03-12T19:14:33.343 [http-nio-10001-exec-1] INFO  c.r.a.s.i.AccountServiceImpl - [reduceBalance,44] - =============ACCOUNT END=================
2024-03-12T19:14:33.374 [http-nio-10001-exec-1] INFO  i.s.r.AbstractResourceManager - [branchRegister,73] - branch register success, xid:10.32.36.131:8091:8043927737756327994, branchId:8043927737756327999, lockKeys:account:1
2024-03-12T19:14:34.443 [rpcDispatch_RMROLE_1_1_16] INFO  i.s.c.r.p.c.RmBranchCommitProcessor - [process,56] - rm client handle branch commit process:BranchCommitRequest{xid='10.32.36.131:8091:8043927737756327994', branchId=8043927737756327999, branchType=AT, resourceId='jdbc:mysql://10.32.36.131:3306/seata_account', applicationData='{"autoCommit":false}'}
2024-03-12T19:14:34.445 [rpcDispatch_RMROLE_1_1_16] INFO  i.s.r.AbstractRMHandler - [doBranchCommit,96] - Branch committing: 10.32.36.131:8091:8043927737756327994 8043927737756327999 jdbc:mysql://10.32.36.131:3306/seata_account {"autoCommit":false}
2024-03-12T19:14:34.447 [rpcDispatch_RMROLE_1_1_16] INFO  i.s.r.AbstractRMHandler - [doBranchCommit,104] - Branch commit result: PhaseTwo_Committed

库存不足

http://localhost:10002/order/placeOrder
{
    "userId": 1,
    "productId": 1,
    "amount": 22
}

在这里插入图片描述

2024-03-12T20:17:45.806 [http-nio-10002-exec-3] INFO  i.s.t.a.DefaultGlobalTransaction - [begin,117] - Begin new global transaction [10.32.36.131:8091:8043927737756328829]
2024-03-12T20:17:45.813 [http-nio-10002-exec-3] INFO  c.r.o.s.i.OrderServiceImpl - [placeOrder,40] - com.alibaba.druid.pool.DruidDataSource$$EnhancerBySpringCGLIB$$34891bfd
2024-03-12T20:17:45.813 [http-nio-10002-exec-3] INFO  c.r.o.s.i.OrderServiceImpl - [placeOrder,41] - =============ORDER START=================
2024-03-12T20:17:45.813 [http-nio-10002-exec-3] INFO  c.r.o.s.i.OrderServiceImpl - [placeOrder,45] - 收到下单请求,用户:1, 商品:1,数量:22
2024-03-12T20:17:45.813 [http-nio-10002-exec-3] INFO  c.r.o.s.i.OrderServiceImpl - [placeOrder,47] - 当前 XID: 10.32.36.131:8091:8043927737756328829
2024-03-12T20:17:45.832 [http-nio-10002-exec-3] INFO  c.r.o.s.i.OrderServiceImpl - [placeOrder,52] - 订单一阶段生成,等待扣库存付款中
2024-03-12T20:17:45.904 [http-nio-10002-exec-3] INFO  i.s.t.a.DefaultGlobalTransaction - [rollback,171] - transaction 10.32.36.131:8091:8043927737756328829 will be rollback
2024-03-12T20:17:45.917 [http-nio-10002-exec-3] INFO  i.s.t.a.DefaultGlobalTransaction - [suspend,209] - transaction end, xid = 10.32.36.131:8091:8043927737756328829
2024-03-12T20:17:45.917 [http-nio-10002-exec-3] INFO  i.s.t.a.DefaultGlobalTransaction - [rollback,193] - [10.32.36.131:8091:8043927737756328829] rollback status: Rollbacked
2024-03-12T20:17:45.918 [http-nio-10002-exec-3] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,107] - 请求地址'/order/placeOrder',发生未知异常.
feign.FeignException$InternalServerError: [500] during [GET] to [http://product/reduceStock?productId=1&amount=22] [ProductFeign#reduceStock(Long,Integer)]: [{"msg":"库存不足","code":500}]


2024-03-12T20:14:51.553 [http-nio-10003-exec-5] INFO  c.r.p.s.i.ProductServiceImpl - [reduceStock,28] - =============PRODUCT START=================
2024-03-12T20:14:51.554 [http-nio-10003-exec-5] INFO  c.r.p.s.i.ProductServiceImpl - [reduceStock,29] - 当前 XID: 10.32.36.131:8091:8043927737756328640
2024-03-12T20:14:51.564 [http-nio-10003-exec-5] INFO  c.r.p.s.i.ProductServiceImpl - [reduceStock,34] - 商品编号为 1 的库存为19,订单商品数量为6
2024-03-12T20:14:51.564 [http-nio-10003-exec-5] INFO  c.r.p.s.i.ProductServiceImpl - [reduceStock,40] - 开始扣减商品编号为 1 库存,单价商品价格为10.0
2024-03-12T20:14:51.598 [http-nio-10003-exec-5] INFO  c.r.p.s.i.ProductServiceImpl - [reduceStock,46] - 扣减商品编号为 1 库存成功,扣减后库存为13, 6 件商品总价为 60.0 
2024-03-12T20:14:51.598 [http-nio-10003-exec-5] INFO  c.r.p.s.i.ProductServiceImpl - [reduceStock,47] - =============PRODUCT END=================
2024-03-12T20:14:51.611 [http-nio-10003-exec-5] INFO  i.s.r.AbstractResourceManager - [branchRegister,73] - branch register success, xid:10.32.36.131:8091:8043927737756328640, branchId:8043927737756328642, lockKeys:product:1
2024-03-12T20:14:51.690 [rpcDispatch_RMROLE_1_3_16] INFO  i.s.c.r.p.c.RmBranchRollbackProcessor - [process,56] - rm handle branch rollback process:BranchRollbackRequest{xid='10.32.36.131:8091:8043927737756328640', branchId=8043927737756328642, branchType=AT, resourceId='jdbc:mysql://10.32.36.131:3306/seata_product', applicationData='{"autoCommit":false}'}
2024-03-12T20:14:51.690 [rpcDispatch_RMROLE_1_3_16] INFO  i.s.r.AbstractRMHandler - [doBranchRollback,123] - Branch Rollbacking: 10.32.36.131:8091:8043927737756328640 8043927737756328642 jdbc:mysql://10.32.36.131:3306/seata_product
2024-03-12T20:14:51.736 [rpcDispatch_RMROLE_1_3_16] INFO  i.s.r.d.u.AbstractUndoLogManager - [undo,338] - xid 10.32.36.131:8091:8043927737756328640 branch 8043927737756328642, undo_log deleted with GlobalFinished
2024-03-12T20:14:51.741 [rpcDispatch_RMROLE_1_3_16] INFO  i.s.r.d.DataSourceManager - [branchRollback,124] - branch rollback success, xid:10.32.36.131:8091:8043927737756328640, branchId:8043927737756328642
2024-03-12T20:14:51.742 [rpcDispatch_RMROLE_1_3_16] INFO  i.s.r.AbstractRMHandler - [doBranchRollback,131] - Branch Rollbacked result: PhaseTwo_Rollbacked

在这里插入图片描述

余额不足

http://localhost:10002/order/placeOrder
{
    "userId": 1,
    "productId": 1,
    "amount": 6
}

在这里插入图片描述

2024-03-12T20:21:07.975 [http-nio-10002-exec-7] INFO  i.s.t.a.DefaultGlobalTransaction - [begin,117] - Begin new global transaction [10.32.36.131:8091:8043927737756329046]
2024-03-12T20:21:07.983 [http-nio-10002-exec-7] INFO  c.r.o.s.i.OrderServiceImpl - [placeOrder,40] - com.alibaba.druid.pool.DruidDataSource$$EnhancerBySpringCGLIB$$34891bfd
2024-03-12T20:21:07.983 [http-nio-10002-exec-7] INFO  c.r.o.s.i.OrderServiceImpl - [placeOrder,41] - =============ORDER START=================
2024-03-12T20:21:07.983 [http-nio-10002-exec-7] INFO  c.r.o.s.i.OrderServiceImpl - [placeOrder,45] - 收到下单请求,用户:1, 商品:1,数量:6
2024-03-12T20:21:07.983 [http-nio-10002-exec-7] INFO  c.r.o.s.i.OrderServiceImpl - [placeOrder,47] - 当前 XID: 10.32.36.131:8091:8043927737756329046
2024-03-12T20:21:07.995 [http-nio-10002-exec-7] INFO  c.r.o.s.i.OrderServiceImpl - [placeOrder,52] - 订单一阶段生成,等待扣库存付款中
2024-03-12T20:21:08.102 [http-nio-10002-exec-7] INFO  i.s.t.a.DefaultGlobalTransaction - [rollback,171] - transaction 10.32.36.131:8091:8043927737756329046 will be rollback
2024-03-12T20:21:08.151 [http-nio-10002-exec-7] INFO  i.s.t.a.DefaultGlobalTransaction - [suspend,209] - transaction end, xid = 10.32.36.131:8091:8043927737756329046
2024-03-12T20:21:08.151 [http-nio-10002-exec-7] INFO  i.s.t.a.DefaultGlobalTransaction - [rollback,193] - [10.32.36.131:8091:8043927737756329046] rollback status: Rollbacked
2024-03-12T20:21:08.152 [http-nio-10002-exec-7] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,107] - 请求地址'/order/placeOrder',发生未知异常.
feign.FeignException$InternalServerError: [500] during [GET] to [http://account/reduceBalance?userId=1&price=60.0] [AccountFeign#reduceBalance(Long,Double)]: [{"msg":"余额不足","code":500}]



2024-03-12T20:21:08.004 [http-nio-10003-exec-9] INFO  c.r.p.s.i.ProductServiceImpl - [reduceStock,28] - =============PRODUCT START=================
2024-03-12T20:21:08.005 [http-nio-10003-exec-9] INFO  c.r.p.s.i.ProductServiceImpl - [reduceStock,29] - 当前 XID: 10.32.36.131:8091:8043927737756329046
2024-03-12T20:21:08.009 [http-nio-10003-exec-9] INFO  c.r.p.s.i.ProductServiceImpl - [reduceStock,34] - 商品编号为 1 的库存为19,订单商品数量为6
2024-03-12T20:21:08.010 [http-nio-10003-exec-9] INFO  c.r.p.s.i.ProductServiceImpl - [reduceStock,40] - 开始扣减商品编号为 1 库存,单价商品价格为10.0
2024-03-12T20:21:08.029 [http-nio-10003-exec-9] INFO  c.r.p.s.i.ProductServiceImpl - [reduceStock,46] - 扣减商品编号为 1 库存成功,扣减后库存为13, 6 件商品总价为 60.0 
2024-03-12T20:21:08.029 [http-nio-10003-exec-9] INFO  c.r.p.s.i.ProductServiceImpl - [reduceStock,47] - =============PRODUCT END=================
2024-03-12T20:21:08.040 [http-nio-10003-exec-9] INFO  i.s.r.AbstractResourceManager - [branchRegister,73] - branch register success, xid:10.32.36.131:8091:8043927737756329046, branchId:8043927737756329048, lockKeys:product:1
2024-03-12T20:21:08.111 [rpcDispatch_RMROLE_1_5_16] INFO  i.s.c.r.p.c.RmBranchRollbackProcessor - [process,56] - rm handle branch rollback process:BranchRollbackRequest{xid='10.32.36.131:8091:8043927737756329046', branchId=8043927737756329048, branchType=AT, resourceId='jdbc:mysql://10.32.36.131:3306/seata_product', applicationData='{"autoCommit":false}'}
2024-03-12T20:21:08.111 [rpcDispatch_RMROLE_1_5_16] INFO  i.s.r.AbstractRMHandler - [doBranchRollback,123] - Branch Rollbacking: 10.32.36.131:8091:8043927737756329046 8043927737756329048 jdbc:mysql://10.32.36.131:3306/seata_product
2024-03-12T20:21:08.136 [rpcDispatch_RMROLE_1_5_16] INFO  i.s.r.d.u.AbstractUndoLogManager - [undo,338] - xid 10.32.36.131:8091:8043927737756329046 branch 8043927737756329048, undo_log deleted with GlobalFinished
2024-03-12T20:21:08.140 [rpcDispatch_RMROLE_1_5_16] INFO  i.s.r.d.DataSourceManager - [branchRollback,124] - branch rollback success, xid:10.32.36.131:8091:8043927737756329046, branchId:8043927737756329048
2024-03-12T20:21:08.141 [rpcDispatch_RMROLE_1_5_16] INFO  i.s.r.AbstractRMHandler - [doBranchRollback,131] - Branch Rollbacked result: PhaseTwo_Rollbacked




2024-03-12T20:21:08.076 [http-nio-10001-exec-5] INFO  c.r.a.s.i.AccountServiceImpl - [reduceBalance,28] - =============ACCOUNT START=================
2024-03-12T20:21:08.077 [http-nio-10001-exec-5] INFO  c.r.a.s.i.AccountServiceImpl - [reduceBalance,29] - 当前 XID: 10.32.36.131:8091:8043927737756329046
2024-03-12T20:21:08.083 [http-nio-10001-exec-5] INFO  c.r.a.s.i.AccountServiceImpl - [reduceBalance,33] - 下单用户1余额为 40.0,商品总价为60.0
2024-03-12T20:21:08.083 [http-nio-10001-exec-5] WARN  c.r.a.s.i.AccountServiceImpl - [reduceBalance,36] - 用户 1 余额不足,当前余额:40.0
2024-03-12T20:21:08.093 [http-nio-10001-exec-5] ERROR c.r.c.s.h.GlobalExceptionHandler - [handleRuntimeException,107] - 请求地址'/reduceBalance',发生未知异常.
java.lang.RuntimeException: 余额不足

问题

  • feign 熔断降级导致无法 Rollback,解决方案,可以针对是否有事务,写不同的 feign,不做 fallback 配置。
  • 全局异常处理,设置 response status 500 ,可以解决。

结束

seata nacos spring cloud 至此结束。

标签:INFO,03,http,seata,exec,spring,2024,cloud,nio
From: https://blog.csdn.net/2301_79691134/article/details/136620914

相关文章

  • springcloud 基础组件-Feign 调用流程
    原图来自:https://blog.csdn.net/luanlouis/article/details/82821294所有注册的feignclientorg.springframework.cloud.openfeign.FeignAutoConfiguration#feignContext决定使用哪种client的地方org.springframework.cloud.openfeign.FeignAutoConfiguration.OkHttpFeignCo......
  • 分布式之SpringCloud
    一、SpringCloud1、SpringCloud是什么SpringCloud是一系列框架的有序集合,这些框架为我们提供了分布式系统构建工具。2、SpringCloud包含那些项目项目项目名称服务注册于发现AlibabaNacos、NetflixEureka、ApacheZookper分布式配置中心AlibabaNacos、SpringCloudC......
  • 2024基于协同过滤算法springboot微信订餐小程序项目
    项目介绍基于springboot开发的订餐小程序,用户在微信小程序里面进行注册登录,点餐,收藏,评论等,管理员在后台网页端进行对菜品,分类,订单,用户,角色,评论等进行管理,小程序界面通过协同过滤算法给用户推荐菜品技术栈后端:springboot+JPA+Mysql8+redis+maven+idea前端:后台:HTML+JS+CSS......
  • SpringBoot Web开发
    JAR:webapp!自动装配在进行一个springboot项目开发前需要解决的问题:导入静态资源。。首页jsp,模版引擎Thymeleaf装配扩展springMVC增删改查拦截器国际化!静态资源1.在springboot,我们可以使用一下方式处理静态资源webjarslocalhost:8080/webjarspublic,static,/**,res......
  • 基于springboot的社区志愿者信息活动管理系统【源码论文】
      博主介绍:......
  • 基于springboot的校园便利跑腿二手交易平台【源码论文】
      博主介绍:......
  • 基于springboot的贫困地区儿童资助捐款捐物系统【源码论文】
      博主介绍:......
  • android使用okhttp3连接springboot
    首先在build.gradle.kts中导入依赖在dependencies{}中添加以下代码implementation("com.squareup.okhttp3:okhttp:4.9.1")之后在MainActivity中加入以下代码privateOkHttpClientclient=newOkHttpClient();privatevoidsendPostRequest(Useruser){//......
  • springboot232青年公寓服务平台
    大学本科毕业论文(设计)青年公寓服务平台的设计与实现       学院(系):   信息科学与技术学院             专      业:                                  学      号:           ......
  • Java项目源码基于springboot的家政服务平台的设计与实现
    大家好我是程序员阿存,在java圈的辛苦码农。辛辛苦苦板砖,今天要和大家聊的是一款Java项目源码基于springboot的家政服务平台的设计与实现,项目源码以及部署相关请联系存哥,文末附上联系信息。项目源码:Java基于springboot的家政服务平台的设计与实现.rar资源-CSDN文库项目简介:......