Spring Cloud GateWay实现熔断降级

这篇具有很好参考价值的文章主要介绍了Spring Cloud GateWay实现熔断降级。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

熔断降级

当分布式系统中的网关接收到大量请求并向后端远程系统或服务发起调用时,后端服务可能会产生调用失败(如超时或异常)。这时,如果让请求继续堆积在网关上,可能会导致整个系统的瘫痪。因此,需要快速失败并返回请求,这就是所谓的熔断。

降级是指在系统资源不足或者异常流量过大的情况下,通过限制部分功能或服务的使用,保证系统核心功能的正常运行

熔断降级可以看作是一种保护机制,当后端服务出现问题时,网关能够及时切断请求,避免问题在系统中扩散,同时提供降级服务,以尽可能减少对用户的影响。

Spring Cloud GateWay实现熔断降级

在Spring Cloud Gateway中,可以通过配置Hystrix GatewayFilter来实现熔断降级。Hystrix是一个用于处理分布式系统中延迟和故障的库,它可以检测远程服务的故障,并在服务不可用时自动触发熔断器,以保护系统不受影响。同时,Hystrix还允许定义降级策略,当服务出现故障时,可以回退到备用逻辑或提供降级功能,以避免系统完全中断。

Spring Cloud Gateway 集成Hystrix

1、添加Hystrix 依赖

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

2、配置文件配置

server:
  port: 8082

spring:
  application:
    name: gateway
  redis:
      host: localhost
      port: 6379
      password: 123456
  cloud:
    gateway:
      routes:
        - id: rateLimit_route
          uri: http://localhost:8000
          order: 0
          predicates:
            - Path=/test/**
          filters:
			 # 指定使用HystrixGatewayFilterFactory生成filter
            - name: Hystrix
              args:
                # 指定hystrix command的名称
                name: defaultfallback
                # 配置降级转发的接口,注意fallbackUri要以forward开头
                fallbackUri: forward:/defaultfallback

# 设置hystrix 隔离策略,下面是hystrix 信号量隔离,1.5秒后自动超时
hystrix:
  command:
    default:
      execution:
        isolation:
          #隔离策略
          strategy: SEMAPHORE
          thread:
            #超时时间,单位为毫秒
            timeoutInMilliseconds: 3000

过滤器Hystrix,作用是通过Hystrix进行熔断降级

当上游的请求,进入了Hystrix熔断降级机制时,就会调用fallbackUri配置的降级地址。需要注意的是,还需要单独设置Hystrix的commandKey的超时时间

fallbackUri配置的网关降级地址接口的代码如下,大家可以自定义自己的降级逻辑:

@RestController
public class FallbackController {

    @GetMapping("/defaultfallback")
    public Response defaultfallback() {
        Response response = new Response();
        response.setCode("100");
        response.setMessage("服务暂时不可用");
        return response;
    }
}

我们要为fallbackUri编写一个用于降级的controller方法,并在配置文件中配置

Hystrix资源隔离策略

Hystrix的隔离策略有两种:分别是线程隔离和信号量隔离。

THREAD(线程隔离):线程隔离是Hystrix的默认策略,它会为每个HystrixCommand命令分配一个独立的线程池,每个命令都会在单独的线程上执行,互不干扰,并发请求受线程池中线程数量的限制。

线程池隔离下每个命令在独立的线程中执行,通过限制并发线程数,可以保护应用程序免受故障服务的慢速或错误响应的影响。线程池隔离提供了更好的资源隔离和保护,但也需要更多的资源开销。

SEMAPHORE(信号量隔离):信号量隔离是一种基于计数器的隔离策略,使用该方式,HystrixCommand将会在调用线程上执行,通过为每个hystrix命令分配一个独立的计数器来控制并发访问的数量。当并发请求达到一定阈值时,超出的请求会被拒绝,并发请求受信号量的个数的限制。

SEMAPHORE模式下所有的命令在同一个线程中执行,共享相同的线程池,通过限制并发访问数来保护应用程序。信号量隔离提供了更低的资源消耗,但是当依赖服务发生故障时,可能会导致整个应用程序的阻塞。

大家按照自己的需求选择合适的隔离策略文章来源地址https://www.toymoban.com/news/detail-782441.html

到了这里,关于Spring Cloud GateWay实现熔断降级的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Cloud实战 |分布式系统的流量控制、熔断降级组件Sentinel如何使用

    专栏集锦,大佬们可以收藏以备不时之需 Spring Cloud实战专栏:https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏:https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏:https://blog.csdn.net/superdangbo/category_9271502.html tensorflow专栏:https://blog.csdn.net/superdangbo/category_869

    2024年02月04日
    浏览(69)
  • 高版本Spring Cloud中OpenFeign整合Hystrix熔断降级不生效的问题及解决方案

    本文将介绍在使用高版本Spring Cloud(2020.0.x及以后),由于取消了Hystrix的集成,导致OpenFeign与Hystrix熔断降级不生效的问题。同时,也将给出解决该问题的方案,即添加feign.circuitbreaker.enabled=true配置。 随着Spring Cloud框架的发展,高版本Spring Cloud(2020.0.x及以上)中取消了对Hy

    2024年02月22日
    浏览(45)
  • Spring Cloud Gateway 实现原理

    Spring Cloud Gateway是Spring Cloud生态系统中的一个组件,用于构建基于Spring Boot的微服务架构中的网关服务。它的主要目的是提供一种灵活的方式来路由、过滤和转换HTTP请求,从而允许您构建强大、高性能的微服务应用程序。 以下是Spring Cloud Gateway的一些核心原理和功能: 路由(

    2024年02月10日
    浏览(38)
  • Spring Cloud Gateway实现灰度发布功能

    灰度发布又名金丝雀发布,在微服务中的表现为同一服务同时上线不同版本,让一部分用户使用新版本来验证新特性,如果验证没有问题,则将所有用户都迁移到新版本上。 在微服务架构中,网关负责请求的统一入口,主要功能之一是请求路由。而灰度发布实质就是让指定用

    2024年02月21日
    浏览(80)
  • Spring Cloud Gateway 网关实现白名单功能

    1 摘要 对于微服务后台而言,网关层作为所有网络请求的入口。一般基于安全考虑,会在网关层做权限认证,但是对于一些例如登录、注册等接口以及一些资源数据,这些是不需要有认证信息,因此需要在网关层设计一个白名单的功能。本文将基于 Spring Cloud Gateway 2.X 实现白

    2023年04月08日
    浏览(42)
  • 【Spring Cloud 六】Hystrix熔断

    【Spring Cloud一】微服务基本知识 【Spring Cloud 三】Eureka服务注册与服务发现 【Spring Cloud 四】Ribbon负载均衡 【Spring Cloud 五】OpenFeign服务调用 目前开发的项目其微服务之间的熔断处理方式使用的就是Hystrix的方式,为了更加的体会到它代码的便捷和高效,所以博主对Hystrix进行了

    2024年02月14日
    浏览(47)
  • Spring Cloud Gateway编码实现任意地址跳转

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 作为《Spring Cloud Gateway实战》系列的第十四篇,本文会继续发掘Spring Cloud Gateway的潜力,通过编码体验操控网关的乐趣,开发出一个实用的功能:让Spring Cloud Gateway应用在收到请求后,可以按照业务的

    2024年02月11日
    浏览(39)
  • Spring Cloud Gateway集成Nacos实现负载均衡

    💡Nacas可以用于实现Spring Cloud Gateway中网关动态路由功能,也可以基于Nacos来实现对后端服务的负载均衡,前者利用Nacos配置中心功能,后者利用Nacos服务注册功能。 接下来我们来看下Gateway集成Nacos实现负载均衡的架构图 一. 环境准备 1. 版本环境 Jdk: java.version1.8/java.version Spr

    2024年02月10日
    浏览(54)
  • 基于Spring-cloud-gateway实现全局日志记录

    最近项目在线上运行出现了一些难以复现的bug需要定位相应api的日志,通过nginx提供的api请求日志难以实现,于是在gateway通过全局过滤器记录api请求日志。 接受到用户请求后,经过全局过滤器,检验是否开启相应的日志配置及相应的黑白名单配置 在gateway前置处理如记录当前

    2024年02月11日
    浏览(58)
  • Spring Cloud 之 Sentinel简介与GATEWAY整合实现

    随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 熔断 微服务架构的系统通常会包含

    2024年02月19日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包