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. nexys3使用笔记1
  2. 2-hadoop-Hadoop以及生态
  3. php 信号量 关闭,php 信号量
  4. Java8基础之反射
  5. PullToRefreshListView相关
  6. [做一个幸福的记号 忘了琐碎的烦恼]西兰花猪柳
  7. win10黑客教学(5)--xscan漏洞探测
  8. 便携式CAN分析仪与毫米波雷达搭配使用
  9. OA性能调优方案(一)
  10. 政府采购法律法规百题知识竞赛试题CSDN
  11. Structed Streaming(Continuous Processing报错):StreamingQueryException;java.util.NoSuchElementException
  12. 鲲鹏芯片的服务器,鲲鹏处理器及服务器介绍.pdf
  13. 干货《周志华机器学习详细公式推导版》发布,南瓜书pumpkin-book
  14. 计算机的人分类,计算机的分类
  15. 基于Matlab的载波同步建模与仿真(科斯塔斯环)
  16. AndroidStudio蓝牙通信
  17. 511遇见易语言API模块通过进程名获取进程句柄
  18. 在python中如何读取批量图片_Python批量处理图片
  19. 最新双十一淘宝查历史最低价流量主小程序源码/亲测
  20. centOS6安装redis

热门文章

  1. php中添加访问器,php – 结合访问器和mutator逻辑,为模型添加自定义属性
  2. 6 款 Java 8 自带工具,轻松分析定位 JVM 问题!
  3. “阿姨我不想努力了”,阿姨的回复让我重燃斗志!
  4. 皮一皮:碰上一个说倒装句的直男怎么办...
  5. Windows 的这款工具,有时让我觉得 Mac 不是很香
  6. Spring Security 实战干货:客户端OAuth2授权请求的入口在哪里
  7. Java随机数中的陷阱
  8. PaaS Innovation 2017开幕在即,共襄技术演进与商业碰撞盛宴
  9. 测试晶面间距软件_【干货】高分辨TEM晶面间距的测量与标定丨DM软件
  10. SpringBoot定义统一的controller返回格式