一、该问题的重现步骤是什么?
下载seata1.4.2并启动(无注册中心,文件存储),修改LauncherConstant的seata ip地址,分别启动blade-seata-order、blade-seata-storage,按照示例操作可以提交、回滚;此示例没有体现分布式事务特点,完全是手动判断是否调用成功、手动抛出异常,而且是在调用方抛出,是一个简单的spring事务。
2. 测试2:只启动order(去除熔断类、去除手工抛异常),关闭storage,控制台没有报任何异常,事务竟然正常提交成功,订单表有了新数据,事务没有起到作用。
IStorageClient.java
@FeignClient(name = "blade-seata-storage") IStorageClient {
OrderServiceImpl.java createOrder
// if (cnt2 < 0) {
// throw new ServiceException("创建订单失败");
// } else if (count > maxCount) {
// throw new ServiceException("超过订单最大值,创建订单失败");
// }
http://localhost:8501/order/create?userId=1&commodityCode=product-2&count=1
{"code":400,"success":false,"data":{},"msg":"操作失败"}
3.测试3:在上面的基础上,把storage启动,提交订单还是成功了(控制台有异常,页面显示失败,但订单表有了新数据)。
java.lang.RuntimeException: 超过库存数,扣除失败!
http://localhost:8501/order/create?userId=1&commodityCode=product-2&count=1
{"code":400,"success":false,"data":{},"msg":"操作失败"}
二、你期待的结果是什么?实际看到的又是什么?
期待结果:被调用方异常时回滚事务
实际看到:被调用方异常或未启动,对事务没有任何影响,完全不起作用
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
bladex2.9
windows10
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
扫一扫访问 Blade技术社区 移动端