Feign整合Sentinel

1,027 阅读2分钟

参考:

介绍 · alibaba/Sentinel Wiki (github.com)

Sentinel · alibaba/spring-cloud-alibaba Wiki · GitHub

公司项目一直以来都是用Hystrix来做熔断,最近架构部要求换成Sentinel,用了一段时间之后发现Sentinel确实很强大,在此介绍Feign如何整合Sentinel在项目中如何实现熔断和降级。

Hystrix和Sentinel异同

功能SentinelHystrix
隔离策略信号量隔离线程池隔离/信号量隔离
熔断降级策略基于响应时间或失败比率基于失败比率
实时指标实现滑动窗口滑动窗口(基于 RxJava)
规则配置支持多种数据源支持多种数据源
扩展性多个扩展点插件的形式
基于注解的支持支持支持
限流基于 QPS,支持基于调用关系的限流不支持
流量整形支持慢启动、匀速器模式不支持
系统负载保护支持不支持
控制台开箱即用,可配置规则、查看秒级监控、机器发现等不完善
常见框架的适配Servlet、Spring Cloud、Dubbo、gRPCServlet、Spring Cloud Netflix

可见,除了熔断的实现方式以外,Hystrix和Sentinel最大的区别就是Sentinel提供了控制台,可以在界面上对接口的限流策略进行调控,而且Sentinel的生态也是偏向于阿里系

Sentinel熔断降级处理

sentinel适配了fiegn的熔断处理,如果想使用sentinel方式的熔断,只需要引入sentinel依赖,在yml配置文件上添加些许配置即可,代码上可以不作任何改动,相当方便

  1. pom文件添加依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
  1. yml文件添加配置
feign:
  sentinel:
    enabled: true
  1. 代码上保持Hystrix的写法即可,这里换成fallbackFactory也可以
@FeignClient(name = "service-provider", fallback = EchoServiceFallback.class)
public interface EchoService {
    @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
    String echo(@PathVariable("str") String str);
}

@Service
class EchoServiceFallback implements EchoService {
    @Override
    public String echo(@PathVariable("str") String str) {
        return "echo fallback";
    }
}

Sentinel控制台的安装和使用

sentinel控制台跟nacos一样,需要单独安装部署,源码下载地址: github.com/alibaba/Sen…

下载完之后通过maven命令打包:

mvn clean package

之后切换到以下目录:sentinel-dashboard\target,运行命令启动jar包,端口可按需修改

java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

启动完成后访问http://localhost:8090/#/dashboard/home ,默认的账号密码都是sentinel

企业微信截图_16384133008531.png