Hystrix GatewayFilter Factory

1、Hystrix是Netflix实现的断路器模式工具包

The Hystrix GatewayFilter就是将断路器使用在gateway的路由上,目的是保护你的服务避免级联故障,以及在下游失败时可以降级返回。

2、项目里面引入spring-cloud-starter-netflix-hystrix依赖

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

3、提供HystrixCommand的名字,即可生效Hystrix GatewayFilter。

spring:  cloud:    gateway:      routes:     - id: hystrix_route      uri: http://www.google.com     filters:        - Hystrix=myCommandName

4、Hystrix过滤器也是通过配置可以参数fallbackUri

来支持路由熔断后的降级处理,降级后,请求会跳过fallbackUri配置的路径,目前只支持forward:的URI协议。

spring:cloud:gateway:routes:- id: hystrix_routeuri: lb://backing-service:8088predicates:- Path=/consumingserviceendpointfilters:- name: Hystrixargs:name: fallbackcmdfallbackUri: forward:/incaseoffailureusethis

当Hystrix降级后就会将请求转发到/incaseoffailureusethis。整个流程其实是用fallbackUri将请求跳转到gateway内部的controller或者handler。

5、通过以下的方式将请求转发到外部的服务

spring:cloud:gateway:routes:- id: ingredientsuri: lb://ingredientspredicates:- Path=//ingredients/**filters:- name: Hystrixargs:name: fetchIngredientsfallbackUri: forward:/fallback- id: ingredients-fallbackuri: http://localhost:9994predicates:- Path=/fallback

以上的例子,gateway降级后就会将请求转发到http://localhost:9994。

Hystrix Gateway filter在转发降级请求时,会将造成降级的异常设置在ServerWebExchangeUtils.HYSTRIX_EXECUTION_EXCEPTION_ATTR属性中,在处理降级时也可以用到。

6、通过下面配置可以设置Hystrix的全局超时信息

hystrix.command.fallbackcmd.execution.isolation.thread.timeoutInMilliseconds: 5000

7、为何要使用断路器?以及断路器的原理是啥?

如果一个应用不能对来自依赖的故障进行隔离,那该应用本身就处在被拖垮的风险中。 因此,为了构建稳定、可靠的分布式系统,我们的服务应当具有自我保护能力,当依赖服务不可用时,当前服务启动自我保护功能,从而避免发生雪崩效应。本文将重点介绍使用Hystrix解决同步等待的雪崩问题。

断路器工作原理

服务端的服务降级逻辑会因为hystrix命令调用依赖服务超时而触发,也就是说调用服务超时会进入断路回调逻辑处理。但是即使这样,受限于Hystrix超时时间的问题,调用依然会有可能产生堆积。这个时候断路器就会发挥作用。

这里涉及到断路器的三个重要参数:

  1. 快照时间窗 :断路器确定是否打开需要统计一些请求和错误数据,而统计的时间范围就是快照时间窗,默认为最近的10秒。
  2. 请求总数下限:在快照时间窗内,必须满足请求总数下限才有资格熔断。默认为20,意味着在10秒内,如果该hystrix命令的调用次数不足20,即使所有的请求都超时或者其他原因失败,断路器都不会打开。
  3. 错误百分比下限:当请求总数在快照时间窗口内超过了下限,比如发生了30次调用,如果在这30次调用中有16次发生了超时异常,也就是超过了50%错误百分比,在默认设定50%下限情况下,这时候就会将断路器打开。

综上,断路器打开的条件是:在时间快照窗口期(默认为10s)内,至少发生20次服务调用,并且服务调用错误率超过50%。

以下为理解

Spring cloud gateway 详解和配置使用(文章较长)_荡漾-的博客-CSDN博客_springgateway配置

不满足条件时断路器并不会打开,服务调用错误只会触发服务降级,也就是调用fallback函数,每个请求时间延迟就是近似hystrix的超时时间。如果将超时时间设置为5秒,那么每个请求都要延迟5每秒才会返回。当断路器在10秒内发现请求总数超过20并且错误率超过50%,这时候断路器会打开。之后再有请求调用的时候,将不会调用主逻辑,而是直接调用降级逻辑,这个时候就不会等待5秒之后才会返回fallback。通过断路器实现自动发现错误并将降级逻辑切换为主逻辑,减少响应延迟的效果。

在断路器打开之后,处理逻辑并没有结束,此时降级逻辑已经被切换为主逻辑了,那么原来的主逻辑要如何恢复呢?实际上hystrix也实现了这一点:当断路器打开,对主逻辑进行熔断之后,hystrix会启动一个休眠时间窗,在这个时间窗内,降级逻辑是临时的主逻辑,当休眠时间窗到期,断路器将进入半开状态,释放一次请求到原来的主逻辑,如果此次请求正常返回,那么断路器将进行闭合,主逻辑恢复,如果这次请求依然有问题,断路器继续进入打开状态,休眠时间窗重新计时。

换句话说,断路器每隔一段时间进行一次重试,看看原来的主逻辑是否可用,可用就关闭,不可用就继续打开。

通过上面的机制,hystrix的断路器实现了对依赖资源故障的处理,对降级策略的自动切换以及对主逻辑的自动恢复。这使得我们的微服务在依赖外部服务或资源的时候得到了非常好的保护,同时对于一些具备降级逻辑的业务需求可以实现自动化的切换和恢复,相比于设置开关由监控和运维来进行切换的传统实现方式显得更为智能和高效。

gateway整合hystrix相关推荐

  1. SpringCloudAlibaba 六、Sentinel 服务保护 ( 服务降级/ 熔断/ 数据持久化 / gateway 整合 Sentinel )

    一.Sentinel 描叙 1.Sentinel作用 Sentinel,中文翻译为哨兵,是为微服务提供流量控制.熔断降级的功能,它和Hystrix提供的功能一样,可以有效的解决微服务调用产生的&quo ...

  2. Spring Cloud Gateway 整合阿里 Sentinel网关限流实战!

    前一篇文章介绍了Spring Cloud Gateway的一些基础知识点,今天陈某就来唠一唠网关层面如何做限流? 文章目录如下: 网关如何限流? Spring Cloud Gateway本身自带的限流 ...

  3. java b2b2c shop 多用户商城系统源码- eureka集群整合hystrix框架

    继之前项目继续整合hystrix框架,hystrix框架为Netflix的模块,是一个容错框架.当用户访问服务调用者的时候,如果服务提供者出现异常导致无法正常返回出现请求超时的情况,而服务调用者并不知 ...

  4. Dubbo整合hystrix

    整合hystrix Dubbo提供了,集群容错机制 可以通过配置,进行使用 在实际开发中 一般,都是通过整合hystrix,进行集群容错 Hystrix 是Spring cloud中,默认整合的服务容 ...

  5. Spring Cloud Gateway 整合阿里 Sentinel网关限流实战

    文章目录如下: 网关如何限流? Spring Cloud Gateway本身自带的限流实现,过滤器是RequestRateLimiterGatewayFilterFactory,不过这种上不了台面的就 ...

  6. 实战干货!Spring Cloud Gateway 整合 OAuth2.0 实现分布式统一认证授权!

    今天这篇文章介绍一下Spring Cloud Gateway整合OAuth2.0实现认证授权,涉及到的知识点有点多,有不清楚的可以看下陈某的往期文章. 文章目录如下: 微服务认证方案 微服务认证方案目 ...

  7. Spring Cloud Gateway 整合 knife4j 聚合接口文档

    当系统中微服务数量越来越多时,如果任由这些服务散落在各处,那么最终管理每个项目的接口文档将是一件十分麻烦的事情,单是记住所有微服务的接口文档访问地址就是一件苦差事了.当如果能够将所有微服务项目的接口文 ...

  8. OpenFeign 整合 Hystrix 实现服务降级

    Hystrix 的默认超时时间 :1s OpenFeign底层是使用 ribbon实现的 默认连接超时时间 : 1s 修改连接超时时间配置(OpenFeign): #设置feign客户端超时时间 ri ...

  9. Day 30 - 实作 Amazon API GateWay 整合 AWS Lambda 与 Dynamodb

    Day 30 - 实作 Amazon API GateWay 整合 AWS Lambda 与 Dynamodb Amazon API GateWay 简介 Amazon API Gateway 是由 ...

最新文章

  1. Maven+Spring+CXF+Tomcat7 简单例子实现webservice
  2. AT4996-[AGC034F]RNG and XOR【FWT,生成函数】
  3. 作者:宋璇(1993-),女,食品安全大数据技术北京市重点实验室、北京工商大学计算机与信息工程学院硕士生...
  4. H3C认证无线互联网络专家
  5. Python之数据分析(坐标刻度定位器、散点图、柱状图、颜色区域填充)
  6. MATLAB实现多元正态Copula分布
  7. 诺基亚10.22变革影响的分析
  8. vi编辑器复制删除常用命令
  9. 广州java程序员平均工资_9月程序员工资统计已公布,你拖后腿了吗?
  10. 悉尼大学计算机科学gpa,悉尼大学计算机gpa
  11. Easy Connect连接网络请求异常
  12. BOMAPI和DOMAPI
  13. matlab 找最小值位置,matlab 向量最小值位置
  14. Logger.error不打印错误堆栈信息问题
  15. PNAS:整合抑郁症的分子、细胞和皮层神经影像特征
  16. KingbaseES 数据库本地化配置 LC_CTYPE 和 LC_COLLATE
  17. 【控制control】机械臂运动学、动力学模型
  18. ARFoundation之路-视频播放
  19. 基于STM32F407的简易菜单设计+LCD+按键
  20. seo建设者_SEO优化学习笔记

热门文章

  1. 皮一皮:这大概就是年轻的味道...
  2. 有没有搞错?Java 对象不使用时,要赋值为 null?
  3. 坑你没商量!盘点Java中最常见的事故现场,你都中过哪些招?
  4. 扫码登录是如何实现的?
  5. Spring-Security-入门(一):登录与退出
  6. 电视机当计算机屏幕,怎么实现电视机当电脑的显示器和音箱用?
  7. linux 查端口 三种,Linux查看端口常用的三种用例
  8. mysql 5.1默认缓存_mysql的innodb数据库引擎详解
  9. 宠物龟 扫地机器人_有宠物家庭必选 岚豹扫地机器人太实用了
  10. 一文看懂深度学习AutoML和NAS