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

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

hot3.png

自 Spring Cloud 官方宣布 Spring Cloud Netflix 进入维护状态后,我们开始制作《Spring Cloud Alibaba迁移指南》系列文章,向开发者提供更多的技术选型方案,并降低迁移过程中的技术难度。

第一篇,我们对Hystrix、Resilience4j 和 Sentinel 三个开源项目进行对比,并探讨如何使用一行代码这种极简的方式,将Hystrix迁移到Sentinel。

Hystrix 自从前段时间 之后,社区推荐了 。这 3 款产品各有优劣势,具体的功能差异参考下表(该表来源 ):

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

目前 Sentinel 在 中已经适配了 Spring Cloud 体系,可以用来完全替代 Hystrix 的功能了。

Spring Cloud Alibaba Sentinel 功能介绍

Spring Cloud Alibaba Sentinel 主要是为了整合 Sentinel 和 Spring Boot/Cloud 技术栈。目前完成了如下功能:

  1. 自动适配 Servlet 容器。只需要配置 url-pattern(默认拦截所有请求),即可对拦截的这些 url 进行限流降级操作
  2. 整合了 RestTemplate,使用 RestTemplate 进行操作的时候会被限流降级
  3. 整合了 Feign,兼容了原先的 Hystrix 支持 Feign 的编程模型
  4. 数据源可配置化,只需在配置文件中配置数据源信息,即可动态加载规则
  5. Endpoint 暴露各种元数据,比如配置信息,规则数据
  6. HealthIndicator 检查 Sentinel 健康状态 (整合中)
  7. 支持 Spring Cloud Gateway 和 Zuul (整合中)

Spring Cloud Alibaba Sentinel 代替 Hystrix

想要使用 Spring Cloud Alibaba Sentinel,需要加上依赖信息:

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

0代码修改兼容 Feign

加上 Feign 的依赖:

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

把 hystrix 的配置改成 sentinel 的即可使用 Sentinel 的限流降级功能:

# feign.hystrix.enabled: truefeign.sentinel.enabled: true
@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/u/1464083/blog/3015534

你可能感兴趣的文章
powerdesigner连接数据库的问题
查看>>
git-git基本使用
查看>>
Spring Cloud Stream如何处理消息重复消费?
查看>>
namespace
查看>>
CSS3 Media Queries 详解
查看>>
OutOfMemoryError: unable to create new native t...
查看>>
JavaLib | 使用AOP帮你记录日志
查看>>
Hibernate与 MyBatis的比较
查看>>
DNS劫持原理与实现
查看>>
论编程思想
查看>>
#CCNA#IP地址与子网划分
查看>>
算法复杂度和算法中的线索
查看>>
TypeScrip最污的技术课-技术胖TypeScript图文视频教程
查看>>
简单的单例模式其实也不简单
查看>>
控制器view的创建过程
查看>>
PowerDesiger 修改 Mysql 数据库的 Table 或 DataBase 的engin
查看>>
努力学习
查看>>
安卓学习第一天
查看>>
Oracle expdp数据泵远程导出
查看>>
Trilead,SSH2的Java调用
查看>>