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

Seata与Spring Cloud Circuit Breaker熔断器 不兼容,一起使用时Seata分布式功能失效

Open n65785828 opened this issue 6 years ago • 3 comments

seata-samples中

springcloud-jpa-seata列子中添加Spring Cloud Circuit Breaker 熔断器后,导致Seata分布式事务功能失效 (该demo中添加熔断器后的代码可直接见此处) 添加熔断操作如下:

1.pom文件中升级spring boot 与spring cloud版本(Spring Cloud Circuit Breaker 在springcloud Hoxton版本才能使用 )

`<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.2.2.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>`

2.在business-service 中引入添加Spring Cloud Circuit Breaker 及其实现 resilience4j依赖

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId> </dependency>

3.禁用默认熔断feign.hystrix.enabled=false,在business-service io.seata.sample.service.BusinessService.class中添加熔断器

` @Service public class BusinessService {

@Autowired
private StorageFeignClient storageFeignClient;
@Autowired
private OrderFeignClient orderFeignClient;

@Autowired
private CircuitBreakerFactory cbFactory;

/**
 * 减库存,下订单
 *
 * @param userId
 * @param commodityCode
 * @param orderCount
 */
@GlobalTransactional
public void purchase(String userId, String commodityCode, int orderCount) {
    cbFactory.create("CircuitBreakerName_storage").run(
            new Supplier<Boolean>() {
                @Override
                public Boolean get() {
                  storageFeignClient.deduct(commodityCode, orderCount);
                  orderFeignClient.create(userId, commodityCode, orderCount);
                  return true;
                }
            }
    );

}

}` 添加熔断后发现@GlobalTransactional注解失效了,无法进行全局事务的回滚。是不是seata与

Spring Cloud Circuit Breaker熔断不兼容?

n65785828 avatar Feb 19 '20 03:02 n65785828

兄弟你这个问题解决了吗?我最近在最新1.4.2版本上测试也发现了问题。使用resilience4j作为feign的降级依赖,不过问题和你相反,事务生效,但是服务无法降级。

w7ss avatar Jun 27 '22 07:06 w7ss

兄弟你这个问题解决了吗?我最近在最新1.4.2版本上测试也发现了问题。使用resilience4j作为feign的降级依赖,不过问题和你相反,事务生效,但是服务无法降级。

大哥,你这个问题咋解决的?我用的高版本也这样,我现在用的seata1.7版本的也是事务生效,服务不降级

1124743999 avatar Oct 29 '23 14:10 1124743999

请问这个bug什么时候能修复

jasonSunhu avatar Jan 31 '24 08:01 jasonSunhu