`

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

 
阅读更多

说明:SpringCloud系列笔者自学系列,学习来源是周立的博客  http://www.itmuch.com/ 。而此处转载其博客只是为了方便自己以后的学习。

本篇来源 http://www.itmuch.com/spring-cloud-alibaba-migration/spring-cloud-alibaba-2/

 

 

本文对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

相关文章

 

 

分享到:
评论

相关推荐

    spring boot、spring cloud、spring boot Alibaba以及配套组件版本关系

    该分支特别注意的是版本命名规则的变化,新的Spring Cloud Alibaba版本号由Spring Cloud版本号加上一个扩展版本号组成,例如`2022.0.0.0`表示与Spring Cloud 2022.0.0版本兼容的第一个版本。 ##### 2. 2021.x 分支 ...

    spring-cloud-alibaba,spring cloud alibaba为阿里中间件的分布式解决方案提供了一站式的应用开发解决方案。.zip

    Spring Cloud Alibaba 是一个由阿里巴巴维护的开源项目,它为开发者提供了在分布式系统(如微服务、云应用)中实现各种经典设计模式的工具集。该项目致力于简化开发过程,使开发者可以快速构建一些常见的分布式系统...

    spring cloud alibaba(2.2.1最新版)+n-xc-spring-cloud-alibaba.zip

    7. **Hystrix**:虽然Spring Cloud Alibaba 2.2.1版本推荐使用Sentinel替代Hystrix,但Hystrix仍然是一个重要的熔断组件。在新版本中,可能仍然支持Hystrix,并提供了向Sentinel迁移的路径。 在"xc-spring-cloud-...

    SpringCloud Alibaba 组件骨架

    7. **Hystrix**:虽然 SpringCloud Alibaba 引入了 Sentinel 作为默认的熔断降级库,但 Hystrix 仍是一个经典的容错管理工具。它通过隔离请求、降级策略和回退逻辑,帮助服务在面临故障时保持可用性。 8. **Zipkin*...

    Spring Cloud alibaba 集成 Spring Cloud Gateway

    6. **配置熔断器**:Spring Cloud Alibaba 的 Hystrix 或者 Sentinel 都能作为熔断器来保护微服务。当后端服务不可用或响应时间过长时,熔断器会快速返回一个默认值或错误信息,防止系统过载。 7. **监控和管理**:...

    尚硅谷SpringCloud第2季2020版.mmap

    一篇很好的springCloud学习的思维导读,详细的介绍了,springCloud的搭建步骤以及各组件的说明讲解 涵盖 Eureka服务注册与发现 Zookeeper服务注册与发现 Consul服务注册与发现 Ribbon负载均衡服务调用 OpenFeign...

    spring-cloud-netflix-hystrix应用

    其中,Spring Cloud Netflix Hystrix是一款至关重要的组件,它为企业级应用提供了强大的容错保护,实现了服务间的熔断和降级策略,极大地提升了系统的稳定性和可靠性。 Hystrix的核心概念包括: 1. **熔断器模式**...

    spring-cloud-alibaba+dubbo+nacos内部服务调用

    5. **熔断与降级**:Hystrix或Sentinel(Spring Cloud Alibaba的一部分)可以用来实现服务间的熔断和降级策略,当服务不可用或者响应超时时,能够保护系统不被单个服务的故障所影响,确保整体服务的稳定性。...

    Spring Cloud 2018最新_官网文档_中文参考手册_pdf

    PDF版的手册包含了所有关键组件的介绍、配置指南、最佳实践和示例代码,是学习和查阅Spring Cloud不可或缺的资源。 1. **Eureka**:Spring Cloud Eureka是服务注册与发现的组件,它允许服务提供者向注册中心注册,...

    springCloud项目练习

    第一课: 服务的注册与发现(Eureka) ... 第十一课:docker部署spring cloud项目 第十二课: 断路器监控(Hystrix Dashboard) 第十三课: 断路器聚合监控(Hystrix Turbine) 第十四课: 服务注册(consul)

    05Spring Cloud OpenFeign:基于Ribbon和Hystrix的声明式服务调用1

    Spring Cloud OpenFeign 是一个声明式的服务调用工具,它整合了 Ribbon 和 Hystrix,拥有负载均衡和服务容错功能。Feign 简化了服务调用接口的开发,使得开发者只需创建一个接口并用注解的方式来配置它,就可以实现...

    阿里巴巴springcloud全家桶项目

    总之,阿里巴巴Spring Cloud全家桶项目提供了一个完整的微服务生态,它涵盖了从服务治理到分布式事务处理,再到API管理等多个方面,为企业构建高可用、高性能的微服务体系提供了强大的支持。掌握并灵活运用这些组件...

    springcloud hystrix 断路由

    在分布式系统中,服务间的调用异常处理是至关重要的,Spring Cloud Hystrix 就是为了解决这一问题而设计的。Hystrix 是 Netflix 开源的一个延迟和容错库,用于隔离服务间的调用,防止因某个服务的不稳定导致整个系统...

    Spring Cloud Alibaba 从入门到实战_java_源码.zip

    《Spring Cloud Alibaba 从入门到实战》是一本深入解析Spring Cloud Alibaba框架的实践指南,它旨在帮助Java开发者快速掌握这一微服务生态中的重要组件。Spring Cloud Alibaba是阿里巴巴为Spring Cloud贡献的一系列...

    SpringCloud第3季2024.7z

    10. **Spring Cloud Netflix** 和 **Spring Cloud Alibaba**:Netflix提供了许多微服务组件,但随着Netflix自身战略调整,Spring Cloud Alibaba逐渐成为替代方案,包括Nacos(服务发现)、Sentinel(流量控制)等。...

    基于Spring Cloud Alibaba的微服务架构.zip

    项目中使用了Spring Cloud Alibaba提供的组件,如Nacos、Sentinel、Seata等,以及传统的Spring Cloud组件,如Eureka、Hystrix、Ribbon等。 适用人群 有Java基础的开发者 对微服务架构感兴趣的开发者 希望了解...

    2020最新版SpringCloud(H版&alibaba)框架开发教程全套完整版从入门到精通(41-80讲).rar

    《2020最新版SpringCloud(H版&alibaba)框架开发教程》是一套全面而深入的SpringCloud学习资源,涵盖了从基础到高级的各种技术点。这套教程旨在帮助开发者掌握SpringCloud的核心概念和实践技巧,尤其针对H版及阿里...

    SpringCloud参考指南

    SpringCloud是中国开发者非常熟悉的一个微服务框架,它基于SpringBoot实现了云应用的开发、配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、配置中心等一系列功能,大大简化了分布式系统开发的...

    springcloud微服务框架+服务模版

    spring-cloud-config-eureka:配置中心服务化和高可用代码示例 spring-cloud-config-eureka-bus:配置中心和消息总线示例(配置中心终结版) gateway-service-zuul:Spring Cloud Zuul使用初级篇 网关 均衡负载 ...

Global site tag (gtag.js) - Google Analytics