seata-samples icon indicating copy to clipboard operation
seata-samples copied to clipboard

undo_log不写日志,抛异常不会回滚?

Open jackyzheng123 opened this issue 4 years ago • 2 comments

Spring Cloud Eureka + Feign + Mybatis

Spring Boot version 2.1.2.RELEASE Spring Cloud version Greenwich.RELEASE Seata version 1.1.0

	<dependency>
		<groupId>com.alibaba.cloud</groupId>
		<artifactId>spring-cloud-alibaba-seata</artifactId>
		<version>2.1.0.RELEASE</version>
		<exclusions>
			<exclusion>
				<artifactId>seata-all</artifactId>
				<groupId>io.seata</groupId>
			</exclusion>
		</exclusions>
	</dependency>
	<dependency>
		<groupId>io.seata</groupId>
		<artifactId>seata-all</artifactId>
		<version>1.1.0</version>
	</dependency>

business-server服务

@Override
    @GlobalTransactional
    public void purchase(String userId, String commodityCode, Integer count) {
        // 减库存
        storageServiceClient.deduct(commodityCode, count);

        // 创建订单
        orderServiceClient.create(userId, commodityCode, count);
    }

order-server服务

@Override
    public boolean create(String userId, String commodityCode, Integer count) {
        // 计算订单金额
        final BigDecimal orderMoney = calculate(commodityCode, count);
        // 支付
        accountServiceClient.debit(userId, orderMoney);

        // 保存订单
        OrderDTO orderDTO = new OrderDTO();
        orderDTO.setUserId(userId);
        orderDTO.setOrderNo(UUID.randomUUID().toString().replace("-", ""));
        orderDTO.setCommodityCode(commodityCode);
        orderDTO.setCount(count);
        orderDTO.setMoney(orderMoney);
        return orderMapper.insert(orderDTO);
    }

account-server服务

@Override
    public void debit(String userId, BigDecimal orderMoney) {
        // 查余额
        BigDecimal money = accountMapper.queryMoney(userId);
        if (money.compareTo(orderMoney) < 0) {
            try {
                throw new Exception("余额不足");
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            // 扣钱
            accountMapper.debit(userId, orderMoney);
        }
    }
  1. 抛异常不会回滚 余额不足抛异常,还是扣了库存,保存了订单

  2. undo_log不写日志,没数据


2020-03-27 10:52:28.873 WARN 8516 --- [nio-9094-exec-4] c.a.c.seata.web.SeataHandlerInterceptor : xid in change during RPC from 192.168.160.128:8091:2039003107 to null

  1. 有时会出现如下异常

io.seata.core.exception.RmTransactionException: Response[ TransactionException[Could not register branch into global session xid = 192.168.160.128:8091:2039003036 status = AsyncCommittin ]

jackyzheng123 avatar Mar 27 '20 03:03 jackyzheng123

遇到同样的问题

123252520 avatar Jul 16 '20 09:07 123252520

遇到同样的问题

他try了阿。异常捕获了阿。

zhouixi avatar Dec 08 '20 07:12 zhouixi