SpringCloud开启熔断导致TXLCN回滚失效

本文主要记录项目中所遇的问题,以及查询资料得到的解决方案。

项目环境:

spring-boot:2.2.5.RELEASE
spring-cloud:Hoxton.SR3
txlcn:5.0.2.RELEASE


问题描述:

使用feign调用远程方法并开启熔断,熔断开启后txlcn的回滚失效,发起方A通过feign调用参与方B(删除操作)、C(添加操作),其中B发生异常能正常回滚,C无异常直接正常执行不参与回滚
事务发起方有关配置如下:

spring:
    application:
        name: item-show
    datasource:
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://#:3306/microservice
        username: #
        password: #

hystrix:
    command:
        default:
            execution:
                isolation:
                    # 调用隔离方式,默认采用线程隔离,默认是Thread, 可选Thread|Semaphore,由于LCN使用线程池隔离策略时出现过隐患故使用信号量
                    strategy: SEMAPHORE
feign:
    hystrix:
        enabled: true
server:
    port: 8085
tx-lcn:
    client:
        manager-address: 192.168.3.41:8070

参与方B、C使用mongodb数据库,使用的注解为@TccTransaction,通过cancelMethod自定义业务逻辑实现回滚。


再未启用熔断时,事务能正常回滚。


解决方案:

在Fallback方法执行降级处理的前面加上
DTXUserControls.rollbackGroup(TracingContext.tracing().groupId());如:

public int insert(UserInfo userInfo) {
        DTXUserControls.rollbackGroup(TracingContext.tracing().groupId());
        return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值