博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Cloud Alibaba迁移指南2:一行代码从Hystrix迁移到Sentinel
阅读量:6895 次
发布时间:2019-06-27

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

  hot3.png

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

作者:洛夜,校对:周立

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

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

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

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

目前,Sentinel 在 中已适配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 的详细信息可以参考 。

本文首发

转载于:https://my.oschina.net/eacdy/blog/3006640

你可能感兴趣的文章
“如履薄冰”的游戏技能
查看>>
jQuery文字“橡皮圈“特效
查看>>
Mongo运行错误:Failed to connect 127.0.0.1:27017,reason:errno:10061由于目标计算机积极拒绝,无法连接...
查看>>
【Javascript】之动画加速
查看>>
学习进度条
查看>>
Batch Normalization&Dropout浅析
查看>>
Viewpager+fragment数据更新问题解析
查看>>
Display中getHeight()和getWidth() 官方废弃
查看>>
洛谷 P1525 关押罪犯==codevs 1069 关押罪犯[NOIP 2010]
查看>>
国密算法--Openssl 实现国密算法(加密和解密)
查看>>
经典智力题
查看>>
noip愤怒的小鸟&&vijos2008
查看>>
聚内核和微内核-转
查看>>
微软职位内部推荐-Principal DEV Manager for Bing Client
查看>>
for 循环
查看>>
Entity Framework技术系列之0:开篇
查看>>
201621123048《Java程序设计》第五周学习总结
查看>>
mac编辑器vim美化
查看>>
MD5摘要算法简析
查看>>
《30天自制操作系统》学习笔记一
查看>>