Sentinel实现熔断限流降级

文章介绍了Sentinel框架在Java应用中的使用,包括熔断、降级和限流的实现。通过示例代码展示了如何在Controller和FeignClient中处理熔断和降级。同时,文章对比了Sentinel和Hystrix,指出Sentinel在社区活跃度、功能特性和扩展性上的优势。
摘要由CSDN通过智能技术生成

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 得到了更多的关注。所以,在选择使用哪个框架时,应该根据自己的实际需求和项目背景进行选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值