alibaba / Sentinel

A powerful flow control component enabling reliability, resilience and monitoring for microservices. (面向云原生微服务的高可用流控防护组件)
https://sentinelguard.io/
Apache License 2.0
22.4k stars 8.03k forks source link

Sentinel簇点链路的降级如何设置才能生效呢? #2258

Open beichenhpy opened 3 years ago

beichenhpy commented 3 years ago

开发者们您好,这应该是一个问题,不是bug。。 我是从openfeign+ribbon+hystrix转过来的 这样的在SpringCloud 2020.0 和 SpringCloudAlibaba 2021后 不再支持ribbon+hystrix,转而使用 spring-cloud-loadbalancer 之前使用ribbon+hystrix时,可以通过ribbon设置readTimeout时间来进行超时调用fallback 但是在新版中,没有ribbon了,我该怎么设置readTimeout来进行超时调用fallback呢? 我进行了尝试: 1.我通过dashboard找到了,簇点链路中对应feign调用的那个url,进行了降级操作 配置为

RT:3000
比例阈值:1
熔断时长:1
最小请求书:1
统计时长:1000

我的provider设置了Thread.sleep(6000) 这里按我的理解,是当有一个请求过来,调用超过3000毫秒就触发fallback,但是事实上,没有触发,还是一直等待直到调用完成 请问是我哪里设置有问题吗?还是没有正确的使用Sentinel 期待您的回复

env: Sentinel 1.8.1 SpringCloudAlibaba 2021.1 SpringCloud 2020.0.3

sczyh30 commented 3 years ago

你好,Sentinel 的机制与 Hystrix 不同,目前不提供超时掐断线程的功能;可以借助慢调用熔断+并发控制(信号量隔离)来对慢调用进行防护。


Hi, Sentinel is not designed for "cutting-down" slow in-flight requests. You may leverage circuit breaking (based on slow request strategy) and concurrency limiting (aka. semaphore isolation).

beichenhpy commented 3 years ago

你好,Sentinel 的机制与 Hystrix 不同,目前不提供超时掐断线程的功能;可以借助慢调用熔断+并发控制(信号量隔离)来对慢调用进行防护。

Hi, Sentinel is not designed for "cutting-down" slow in-flight requests. You may leverage circuit breaking (based on slow request strategy) and concurrency limiting (aka. semaphore isolation).

您好,我这边用的就是慢调用熔断不生效。。还要结合qps限制吗?

sczyh30 commented 3 years ago

可以发一下对应的规则以及埋点、监控数据,对比下 熔断规则 里面熔断的条件,看看是否满足熔断条件。

beichenhpy commented 3 years ago

可以发一下对应的规则以及埋点、监控数据,对比下 熔断规则 里面熔断的条件,看看是否满足熔断条件。

我这边是使用openfeign调用的,对应的入口方法没有设置埋点
只是在dashboard中发现了调用另一个服务的url 然后对其设置了慢调用熔断,发现并不生效

provider

 @SneakyThrows
    @GetMapping("/info/{aid}")
    public ResponseEntity<List<Comment>> getCommentInfoByArticleId(@PathVariable("aid") String aid) {
        LambdaQueryWrapper<Comment> queryWrapper = Wrappers.lambdaQuery(new Comment());
        queryWrapper.eq(Comment::getArticleId, aid);
        List<Comment> list = providerService.list(queryWrapper);
        //sleep 6000ms
        Thread.sleep(6000);
        return ResponseEntity
                .ok()
                .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
                .body(list);
    }

consumer-feign

@FeignClient(name = "provider",fallback = ProviderFeignServiceImpl.class)
public interface ProviderFeignService {
    @GetMapping("/api/v1/info/{aid}")
    ResponseEntity<List<Comment>> getCommentInfoByArticleId(@PathVariable("aid") String aid);
}

consumer-controller

  @GetMapping("/info/{aid}")
    public ResponseEntity<Article> info(@PathVariable("aid") String aid) {
        ResponseEntity<List<Comment>> response = providerFeignService.getCommentInfoByArticleId(aid);
        AssertToolkit.feignResponseFail(response.getStatusCode(),"provider");
        Article article = consumerService.getById(aid);
        article.setComments(response.getBody());
        return ResponseEntity
                .ok()
                .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
                .body(article);
    }

dashboard

簇点链路

feign调用的url

慢调用规则

慢调用熔断规则