Spring Cloud Alibaba迁移指南2:一行代码从Hystrix迁移到Sentinel 原 荐

栏目: Java · 发布时间: 5年前

内容简介:本文对Hystrix、Resilience4j、Sentinel进行对比,并探讨如何使用一行代码将Hystrix迁移到Sentinel。作者:洛夜,校对:周立在本博客首发,欢迎转载。

本文对Hystrix、Resilience4j、Sentinel进行对比,并探讨如何使用一行代码将Hystrix迁移到Sentinel。

作者:洛夜,校对:周立

在本博客首发,欢迎转载。

前段时间,Netflix宣布Hystrix进入维护模式,详见 Hystrix停止开发,我们该何去何从? ,而Spring Cloud亦宣布Spring Cloud Netflix进入维护状态,后续不再进行更新已成为事实。作为开发者的我们,如何使用极简的方式替换Hystrix成为首要解决的问题。

Hystrix 宣布停止维护 后,社区推荐了 Resilience4j ,而业界还有Alibaba Sentinel可供选择——3款产品各有优势,具体的功能差异参考下表(该表来自 Sentinel Wiki

Sentinel Hystrix resilience4j
隔离策略 信号量隔离(并发线程数限流) 线程池隔离/信号量隔离 信号量隔离
熔断降级策略 基于响应时间、异常比率、异常数 基于异常比率 基于异常比率、响应时间
实时统计实现 滑动窗口(LeapArray) 滑动窗口(基于 RxJava) Ring Bit Buffer
动态规则配置 支持多种数据源 支持多种数据源 有限支持
扩展性 多个扩展点 插件的形式 接口的形式
基于注解的支持 支持 支持 支持
限流 基于 QPS,支持基于调用关系的限流 有限的支持 Rate Limiter
流量整形 支持预热模式、匀速器模式、预热排队模式 不支持 简单的 Rate Limiter 模式
系统自适应保护 支持 不支持 不支持
控制台 提供开箱即用的控制台,可配置规则、查看秒级监控、机器发现等 简单的监控查看 不提供控制台,可对接其它监控系统

目前,Sentinel 在 Spring Cloud Alibaba 中已适配Spring Cloud体系,完全可用来替代 Hystrix 的功能。 不仅如此,阿里内部很多产品线都已使用Sentinel实现限流降级,Sentinel是经过生产流量大规模验证的。

下面来探讨如何从Hystrix迁移至Sentinel——

Spring Cloud Alibaba Sentinel 代替 Hystrix

要想使用Spring Cloud Alibaba Sentinel,需添加如下依赖,并去除Spring Cloud Netflix Hystrix( spring-cloud-starter-netflix-hystrix )的依赖。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-alibaba-sentinel</artifactId>
    <version>0.2.1.RELEASE</version>
</dependency>

0代码修改兼容Feign

加上Feign的依赖:

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-openfeign</artifactId>
  <version>${latest.version}</version>
</dependency>

application.yml 中添加 feign.sentinel.enabled=true 即可为Feign启用Sentinel支持:

# 去掉
# feign.hystrix.enabled: true
# 改为如下即可
feign.sentinel.enabled: true

Feign Client无需修改:

@FeignClient(name = "service-provider")
public interface EchoService {
    @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
    String echo(@PathVariable("str") String str);
  
  	@RequestMapping(value = "/echo/save", method = RequestMethod.POST)
    String save(Foo foo);
}

对于这个 EchoService ,echo方法对应的资源名是 GET:http://service-provider/echo/{str} , save 方法对应的资源名是 POST:http://service-provider/echo/save

只需配置这些规则,限流降级操作即可生效。

一行代码支持RestTemplate

Sentinel与Spring生态的 RestTemplate 也进行了整合,可对 RestTemplate 请求过程进行限流和降级,只需在构造 RestTemplate 的时候加上 @SentinelRestTemplate 注解即可,如下所示:

@Bean
@SentinelRestTemplate
public RestTemplate restTemplate() {
    return new RestTemplate();
}

@SentinelRestTemplate 注解还暴露出了对应的属性可进行限流降级后的自定义错误,默认的行为是返回 “RestTemplate request block by sentinel” 信息。关于 @SentinelRestTemplate 的详细信息可以参考 Wiki


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

智能商业

智能商业

曾鸣 / 中信出版集团 / 2018-11 / 68.00

《智能商业》由马云作序推荐。《智能商业》是阿里巴巴集团前总参谋长曾鸣,对互联网时代的重要趋势做出革命性解读的作品,披露了其对于未来商业模式的思考和判断。 2006年,曾鸣教授加入阿里巴巴集团,参与阿里巴巴集团及各重要业务线,如淘宝、支付宝、阿里云计算、菜鸟等的发展,被业界称为阿里的“军师”。 基于在阿里巴巴集团十几年的实践经验,以及对互联网、大数据和人工智能的深入思考,曾鸣教授在《智能......一起来看看 《智能商业》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具