Spring Cloud Alibaba迁移指南2:一行代码从Hystrix迁移到Sentinel
发布日期:2021-06-29 09:29:31 浏览次数:2 分类:技术文章

本文共 2530 字,大约阅读时间需要 8 分钟。

作者:洛夜,校对:周立

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

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

Hystrix宣布停止维护后,社区推荐了Resilience4j( https://github.com/resilience4j/resilience4j ) ,而业界还有Alibaba Sentinel可供选择——3款产品各有优势,具体的功能差异参考下表(该表来自Sentinel Wiki( https://github.com/alibaba/Sentinel/wiki/Guideline:-%E4%BB%8E-Hystrix-%E8%BF%81%E7%A7%BB%E5%88%B0-Sentinel#%E5%8A%9F%E8%83%BD%E5%AF%B9%E6%AF%94 ):

  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 )的依赖。

   
org.springframework.cloud
   
spring-cloud-alibaba-sentinel
   
0.2.1.RELEASE

0代码修改兼容 Feign

加上 Feign 的依赖:

 
org.springframework.cloud
 
spring-cloud-starter-openfeign
 
${latest.version}

在 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@SentinelRestTemplatepublic RestTemplate restTemplate() {   return new RestTemplate();}

@SentinelRestTemplate 注解还暴露出了对应的属性可进行限流降级后的自定义错误,默认的行为是返回 "RestTemplate request block by sentinel" 信息。关于 @SentinelRestTemplate 的详细信息可参考Wiki( https://github.com/spring-cloud-incubator/spring-cloud-alibaba/wiki/Sentinel#resttemplate-%E6%94%AF%E6%8C%81 )。

转载地址:https://blog.csdn.net/zl1zl2zl3/article/details/87286898 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:春招收获阿里腾讯实习offer,学习、面试经验分享
下一篇:有赞多级缓存解决方案怎么做的,你知道吗?

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月20日 22时23分56秒