iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >SpringCloud Hystrix怎么使用
  • 772
分享到

SpringCloud Hystrix怎么使用

2023-07-02 18:07:25 772人浏览 安东尼
摘要

这篇文章主要介绍“SpringCloud Hystrix怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springCloud Hystrix怎么使用”文章能帮助大家解决问

这篇文章主要介绍“SpringCloud Hystrix怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springCloud Hystrix怎么使用”文章能帮助大家解决问题。

Hystrix是spring cloud中集成的一个组件,在整个生态中主要为我们提供以下功能:

  • 服务隔离

服务隔离主要包括线程池隔离以及信号量隔离。

  • 服务熔断

当请求持续失败的时候,服务进行熔断,默认熔断5S,也是就说在这5S内的请求一律拒绝。

  • 服务降级

当前请求失败的时候,返回降级的结果。

1. Hystrix的简单使用

1.1 服务降级

添加依赖

<!--        hystrix-->        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>        </dependency>
  1. 启动类添加注解

@EnableCircuitBreaker //开启熔断
  • 对应接口加上注解

注解里面相关的参数可以至HystrixCommandProperties类中查找;注解里面也可以不写相关内容。

fallbackMethod = "fallback"里面是熔断方法名。

//HystrixCommandProperties    @HystrixCommand( commandProperties = {            @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "10")    },fallbackMethod = "fallback")    @GetMapping    public String order() {        log.info("begin do order");//        使用openfiegn        String Goods = goodsService.getGoodsById();        String promotion = promotionService.getPromotionById();        String result = orderService.createOrder(goods, promotion);        return result;    } public String fallback(){        return "触发降级";    }

修改商品服务的接口,加上超时时间,使接口调用错误。

@GetMapping("/goods")public String getGoodsById() {    try {        Thread.sleep(3000);    } catch (Exception e){        e.printStackTrace();    }    log.info("收到请求,端口为:{}", port);    return "返回商品信息";}

启动项目,调用接口,看是否可以进行服务降级。

1.2 服务熔断

熔断的触发机制

在10S内,超过20次请求,并且失败率超过50%(默认情况)- > 触发熔断

熔断后经过一段时间等待后又可以继续正常访问。

我们稍微改造下代码:

    @HystrixCommand(commandProperties = {            @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"), //请求阈值            @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "5000"),//熔断窗口持续时间            @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "50")//错误比    }, fallbackMethod = "fallback")    @GetMapping("/{num}")    public String order(@PathVariable("num") int num) {        if (num % 2 == 0) {            return "正常访问。";        }        log.info("begin do order");        String goods = goodsService.getGoodsById();        String promotion = promotionService.getPromotionById();        String result = orderService.createOrder(goods, promotion);        return result;    }    public String fallback(int num) {        return "触发降级";    }

我们来看下上述代码,首先我们给接口添加了相关一个参数,在接口中根据传参来执行不同的操作,比如参数为2那就正常返回,如果参数为1 就执行下面的代码,由于我们加了超时时间,所以会调用失败。

注意,我们给接口加了参数后,服务降级的方法也要加上相关参数,否则会错误。

触发的相关机制都是可以根据参数自己修改的,大家测试的时候可以将请求阈值设置小一点,方便测试查看效果。

2. OpenFeign集成Hystrix

以上都是我们直接在客户端调用的时候直接集成Hystrix来进行服务的保护,那在OpenFeign中我们该如何集成呢?

然后我们在service-api项目中引入相关依赖:

<!--        hystrix--><dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency>

然后我们在暴露接口的地方创建相关回调实现:

SpringCloud Hystrix怎么使用

我们首先实现暴露接口的FeignClient,然后在实现的方法中编写对应的降级操作即可,这样当发生调用失败的情况,则会返回降级的信息。

这里可以使用component注解将该类交给spring管理,或者通过configuration注解进行处理。

//@Componentpublic class IGoodsServiceFallback implements IGoodsServiceFeignClient {    @Override    public String getGoodsById() {        return "查询商品信息异常,触发降级保护机制。";    }}

编写完该类后,我们需要至FeignClient处进行相关配置。

@FeignClient(name = "goods-service",        configuration = FeignClientLoGConfiguration.class,        fallback = IGoodsServiceFallback.class)public interface IGoodsServiceFeignClient extends IGoodsService {}

这里修改完成后,我们就可以至集成服务修改相关配置了。

首先在配置文件中开启feign的熔断保护机制。

#开启feign的熔断保护机制feign.hystrix.enabled=true

然后需要将之前的IGoodsServiceFallback交给spring容器进行管理,我这里是使用的configuration注解进行处理的。

@Configurationpublic class HystrixFallbackConfiguration {    @Bean    public IGoodsServiceFallback goodsServiceFallback() {        return new IGoodsServiceFallback();    }}

以上便是我们的全部配置,这个时候我们只需要去goods-service中的调用接口人为的制造一些异常,这样调用的时候就可以触发异常了。

比如我直接加了超时时间:

@Slf4j@RestControllerpublic class GoodsService implements IGoodsService  {    @Value("${server.port}")    private String port;        @GetMapping("/goods")    public String getGoodsById() {        try {            Thread.sleep(5000);        } catch (Exception e){            e.printStackTrace();        }        log.info("收到请求,端口为:{}", port);        return "返回商品信息";    }}

然后我们就可以直接开始测试了:

SpringCloud Hystrix怎么使用

可以看到成功获取了降级信息,代表我们集成成功。

实际上我们在调用OpenFeign接口的时候,他会判断我们的Feign接口上是否有Hustrix的一些机制,如果有的话先进行相关判断,然后在执行请求。如下图所示:

SpringCloud Hystrix怎么使用

3. Hystrix熔断原理

下图为Hystrix的熔断简单工作原理,调用出现异常后,如果错误率达到一个阈值,则开始熔断。相关的阈值,时间等都是可以进行配置的。

SpringCloud Hystrix怎么使用

3.1 熔断状态

  • open

触发熔断,意味着请求不会发送到服务端,而是直接调用fallback。

  • closed

熔断关闭,表示可以正常通信。

  • Half-Open

熔断的自动恢复机制。通过尝试的方式,判断服务是否正常,然后恢复到closed 状态;如果还是异常,则继续保持熔断。

SpringCloud Hystrix怎么使用

3.2 熔断的工作原理

使用滑动窗口来实现数据的统计。

可能有人不太了解什么是滑动窗口。

我们首先来看下计数器的一种实现方式,类似我们在60s内只能发送一次短信。比如下图,限制一分钟之内只能接受100个请求,但是位于临界点的时候,我们可能突然收到200个请求,所以可能会导致一些问题。

SpringCloud Hystrix怎么使用

滑动窗口和计算器是类似的,首先多了一个滑动的步骤,窗口会随着时间往前滑动。然后我们的窗口大小是固定的(可以自己设置),比如下图我们的窗口大小就是60S,随着时间的推进,窗口向前滑动,但是会保证大小不变。

SpringCloud Hystrix怎么使用

熔断的阈值就是根据滑动窗口的请求数以及失败次数来进行计算的,从而判断出是否开启熔断。

RxJava 响应式编程(类似WEBflux),实现事件流的分发。

既然了解了他的大致原理,我们再将这部分带入之前的流程中来看:

我们一个请求进来后,如果该接口声明了HystrixCommand注解,首先会调用allowRequest方法去校验当前请求是否允许发生:判断当前是否位于isOpen状态,如果是则直接返回服务降级的逻辑;如果不是则判断当前时间窗口的总健康请求数量是否大于20次(阈值可自行设置),小于则正常执行,如果大于则判断当前滑动窗口内的错误请求率是否达到阈值,从而开启熔断状态。

滑动窗口的数据统计都是通过事件流来实现的,任务执行结束后,通过发布一个时间,然后将相关数据更新到当前时间窗口中,老的数据则直接丢弃。相关流程比较复杂,这里不过多阐述。

SpringCloud Hystrix怎么使用

关于“SpringCloud Hystrix怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: SpringCloud Hystrix怎么使用

本文链接: https://www.lsjlt.com/news/343519.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringCloud Hystrix怎么使用
    这篇文章主要介绍“SpringCloud Hystrix怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringCloud Hystrix怎么使用”文章能帮助大家解决问...
    99+
    2023-07-02
  • SpringCloud Hystrix的使用
    目录简介 服务熔断 实践 服务降级 实践 服务熔断与服务降级的区别 服务监控 Dashboard 建立项目 简介 在分布式系统中,服务与服务之间依赖错综复杂,一种不可避免的情况就是...
    99+
    2024-04-02
  • SpringCloud中Hystrix怎么用
    这篇文章主要为大家展示了SpringCloud中Hystrix怎么用,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“SpringCloud中Hystrix怎么用”这篇文章吧。1.概念服务降级:服务器...
    99+
    2023-06-28
  • SpringCloud之Hystrix的详细使用
    目录***一.服务降级***2.不使用Hystrix的项目3. 使用Hystrix4. 全局的Hystrix配置 ***二.服务熔断***1.熔断机制概述2.项目中使用1....
    99+
    2024-04-02
  • SpringCloud中hystrix参数怎么用
    这篇文章主要介绍SpringCloud中hystrix参数怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、hystrix参数使用方法通过注解@HystrixCommand的commandProperties去...
    99+
    2023-06-05
  • SpringCloud Hystrix熔断器如何使用
    本文小编为大家详细介绍“SpringCloud Hystrix熔断器如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringCloud Hystrix熔断器如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路...
    99+
    2023-07-05
  • SpringCloud微服务熔断器Hystrix如何使用
    这篇文章主要介绍了SpringCloud微服务熔断器Hystrix如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringCloud微服务熔断器Hystrix如何使用文章都会有所收获,下面我们一起来看...
    99+
    2023-07-02
  • SpringCloud微服务熔断器Hystrix使用详解
    目录什么是HystrixHystrix实战总结什么是Hystrix 在日常生活用电中,如果我们的电路中正确地安置了保险丝,那么在电压异常升高时,保险丝就会熔断以便切断电流,从而起到保...
    99+
    2024-04-02
  • 使用SpringCloud-Hystrix-Dashboard怎么客户端服务进行监控
    本篇文章为大家展示了使用SpringCloud-Hystrix-Dashboard怎么客户端服务进行监控,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。服务监控 除了隔离依赖服务的调用以外,...
    99+
    2023-06-07
  • springcloud中如何使用熔断监控Hystrix Dashboard
    这篇文章给大家分享的是有关springcloud中如何使用熔断监控Hystrix Dashboard的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Hystrix-dashboard是一款针对Hystrix进行实时...
    99+
    2023-06-05
  • SpringCloud-Hystrix实现原理是什么
    这篇文章给大家分享的是有关SpringCloud-Hystrix实现原理是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、思维导图二、Hystrix包含的内容(1) 服务降级1)什么是服务降级有了服务的熔断...
    99+
    2023-06-15
  • SpringCloud怎么实现服务调用feign、熔断hystrix和网关gateway
    本文小编为大家详细介绍“SpringCloud怎么实现服务调用feign、熔断hystrix和网关gateway”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringCloud怎么实现服务调用feign、熔断hystrix和网关gat...
    99+
    2023-07-05
  • SpringCloud hystrix断路器与全局解耦怎么实现
    这篇文章主要介绍“SpringCloud hystrix断路器与全局解耦怎么实现”,在日常操作中,相信很多人在SpringCloud hystrix断路器与全局解耦怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好...
    99+
    2023-07-04
  • java B2B2C Springcloud电子商务平台源码------Hystrix的缓存使用
    一 介绍在高并发的场景之下,Hystrix中提供了请求缓存的功能,可以方便地开启和使用请求缓存来优化系统,达到减轻高并发时请求线程的消耗、降低请求响应时间的效果。愿意了解源码的朋友直接求求交流分享技术:二一四七七七五六三三二开启请求缓存功能...
    99+
    2023-06-05
  • SpringCloud hystrix断路器与局部降级问题怎么解决
    这篇文章主要介绍“SpringCloud hystrix断路器与局部降级问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringCloud hystrix断路器与局...
    99+
    2023-07-04
  • SpringCloud的Gateway怎么使用
    这篇文章主要讲解了“SpringCloud的Gateway怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringCloud的Gateway怎么使用”吧!SpringCloud微服...
    99+
    2023-06-05
  • java springcloud的Stream怎么使用
    本篇内容主要讲解“java springcloud的Stream怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java springcloud的Stream怎么使用”吧!Spring C...
    99+
    2023-06-05
  • Spring Cloud中的断路器Hystrix怎么使用
    本篇内容介绍了“Spring Cloud中的断路器Hystrix怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先我们分别启动服务注...
    99+
    2023-06-19
  • Eureka在springcloud中怎么使用
    这篇文章主要介绍“Eureka在springcloud中怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Eureka在springcloud中怎么使用”文章能帮助大家解决问题。什么是服务发现与...
    99+
    2023-06-05
  • Stream怎么在SpringCloud中使用
    本篇文章为大家展示了Stream怎么在SpringCloud中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.建一个项目,并添加如下的依赖: <dependency>&n...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作