Sentinel实现熔断限流降级

1.熔断

@RestController
public class ExampleController {
 
    @Autowired
    private RestTemplate restTemplate;
 
    @GetMapping("consumer")
    @SentinelResource(value = "example-consumer",
            fallback = "handleFallback", // 定义 fallback 函数
            blockHandler = "handleBlock") // 定义 blockHandler 函数
    public String consumer() {
        return restTemplate.getForObject("http://example-provider/provider", String.class);
    }
 
    // fallback 函数要求:
    // 1. 返回类型跟原函数相同;
    // 2. 参数列表只需要加一个 Throwable 类型的参数,用于接收原函数的异常信息
    public String handleFallback(Throwable ex) {
        System.out.println("Fallback:" + ex.getMessage());
        return "Fallback:" + ex.getMessage();
    }
 
    // blockHandler 要求:
    // 1. 方法签名需要和原方法相同;
    // 2. 参数列表需要增加一个 BlockException 类型参数,用于接收对应的异常信息
    public String handleBlock(BlockException ex) {
        System.out.println("BlockHandler:" + ex.getMessage());
        return "BlockHandler:" + ex.getMessage();
    }
 
}

2.降级
降级的代码写入调用方或者客户端

@FeignClient(name = "example-provider", fallback = ExampleFeignFallback.class) 
public interface ExampleFeignClient {

    @GetMapping("/provider")
    String provider();
}


@Component
public class ExampleFeignFallback implements ExampleFeignClient {

    @Override
    public String provider() {
        return "fallback";
    }
}

3.限流
配置 Sentinel 规则
在 Sentinel 的 Dashboard 中配置限流规则,例如:

针对某个特定服务,设置 QPS 阈值为 10,表示每秒钟最多只能处理 10 个请求。
配置完成后,Dashboard 中可以看到规则的生效情况。

@GetMapping("/provider")
@SentinelResource(value = "example-provider", blockHandler = "handleBlock") 
public String provider() {
    // 服务逻辑
}

public String handleBlock(BlockException e) {
    return "请求被限流了!";
}

Hystrix 和 Sentinel 都是实现服务熔断和限流的框架。它们都能够在高并发、分布式场景下保障系统的稳定性和可用性。下面是 Hystrix 和 Sentinel 的对比:

发布时间
Hystrix 是 Netflix 公司在 2012 年开源的,而 Sentinel 是阿里巴巴在 2018 年开源的。

社区活跃度
由于 Hystrix 已经进入维护模式,其社区活跃度相对较低,目前一些新的功能也很少被添加。相反,Sentinel 更加年轻,其社区活跃度相对较高,功能也在不断增加(例如,Sentinel 2.2 版本加入了热点参数规则、总调用链路限流等功能)。同时,阿里也会继续支持 Sentinel 的发展。

功能特性
Hystrix 仅仅提供了熔断和限流的基本功能,而 Sentinel 除了这些功能外,还提供了对热点参数的限流、统计信息预警、动态规则等更加丰富和灵活的功能。

扩展性
Hystrix 的扩展性较差,而 Sentinel 则更加灵活,拥有更多的扩展机制,例如扩展 DataSource、Transport 以及支持 OpenTracing 等。

综上,虽然 Hystrix 有着令人信赖的稳定性和经过实际验证的性能优化,但在可扩展性、功能特性和社区活跃度方面,Sentinel 得到了更多的关注。所以,在选择使用哪个框架时,应该根据自己的实际需求和项目背景进行选择。

你可能感兴趣的:(sentinel,java,servlet)