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: 8082spring:application:name: gatewayredis:host: localhostport: 6379password: 123456cloud:gateway:routes:- id: rateLimit_routeuri: http://localhost:8000order: 0predicates:- Path=/test/**filters:# 指定使用HystrixGatewayFilterFactory生成filter- name: Hystrixargs:# 指定hystrix command的名称name: defaultfallback# 配置降级转发的接口,注意fallbackUri要以forward开头fallbackUri: forward:/defaultfallback# 设置hystrix 隔离策略,下面是hystrix 信号量隔离,1.5秒后自动超时
hystrix:command:default:execution:isolation:#隔离策略strategy: SEMAPHOREthread:#超时时间,单位为毫秒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模式下所有的命令在同一个线程中执行,共享相同的线程池,通过限制并发访问数来保护应用程序。信号量隔离提供了更低的资源消耗,但是当依赖服务发生故障时,可能会导致整个应用程序的阻塞。

大家按照自己的需求选择合适的隔离策略

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/607011.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React16源码: React中Fiber对象的源码实现

关于 Fiber 对象 在FiberRoot里面&#xff0c;它也会为我们去创建的一个对象叫做 Fiber在 React16 之后, 非常核心&#xff0c;非常重要的一个东西A. 每个 ReactElement 都会对应一个 Fiber 对象B. 它会记录节点的各种状态 比如&#xff0c;class component&#xff0c;它的st…

面试算法101:分割等和子集

题目 给定一个非空的正整数数组&#xff0c;请判断能否将这些数字分成和相等的两部分。例如&#xff0c;如果输入数组为[3&#xff0c;4&#xff0c;1]&#xff0c;将这些数字分成[3&#xff0c;1]和[4]两部分&#xff0c;它们的和相等&#xff0c;因此输出true&#xff1b;如…

Docker 中使用超级用户

在docker中安装keytool产生的问题&#xff1a; sudo apt-get install openjdk-8-jre-headless bash: sudo: command not found elasticsearchd989639e3cb4:~/config/certs$ apt-get install openjdk-8-jre-headless E: Could not open lock file /var/lib/dpkg/lock-frontend …

【代码复现系列】paper:CycleGAN and pix2pix in PyTorch

或许有冗余步骤、之后再优化。 1.桌面右键-git bash-输入命令如下【git clone https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix】 2.打开anaconda的prompt&#xff0c;cd到pytorch-CycleGAN-and-pix2pix路径 3.在prompt里输入【conda env create -f environment.y…

【数值分析】逼近,正交多项式

逼近 由离散点&#xff08;函数表&#xff09;给出函数关系通常有两种方法&#xff1a; 使用多项式插值 使用多项式插值会带来两个问题&#xff1a;1. 龙格现象2. 数值本身带有误差&#xff0c;使用插值条件来确定函数关系不合理三次样条插值 三次样条插值克服了龙格现象&…

多线程在编程中的重要性有什么?并以LabVIEW为例进行说明

多线程在编程中的重要性体现在以下几个方面&#xff1a; 并行处理&#xff1a; 多线程允许程序同时执行多个任务&#xff0c;这在现代多核心处理器上尤其重要。通过并行处理&#xff0c;可以显著提高程序的执行效率和响应速度。 资源利用最大化&#xff1a; 通过多线程&#x…

工厂设计模式的思考

工厂模式对于开发者来说并不陌生&#xff0c;他利用多肽性很好的进行业务之间的解耦&#xff0c;不同的场景创建不同的实现&#xff0c;从而使得更多的关注业务实现,这种简单的实现这里不在举例。但是如果情形比较多的时候就会遇到问题&#xff0c;我们的工厂类就会产生大量的i…

Nacos与Eureka的区别详解

Nacos与Eureka的区别详解 在微服务架构中,服务注册与发现是核心组件之一,它们允许服务实例在启动时自动注册,并且能被其他服务发现,从而实现服务之间的互相通信。Nacos和Eureka都是现代微服务体系中广泛使用的服务注册与发现工具。本文将深入分析二者的区别,并为您提供一…

基于YOLOv7开发构建道路交通场景下CCTSDB2021交通标识检测识别系统

交通标志检测是交通标志识别系统中的一项重要任务。与其他国家的交通标志相比&#xff0c;中国的交通标志有其独特的特点。卷积神经网络&#xff08;CNN&#xff09;在计算机视觉任务中取得了突破性进展&#xff0c;在交通标志分类方面取得了巨大的成功。CCTSDB 数据集是由长沙…

OpenFeign超时控制

OpenFeign超时控制 前面简单介绍了Feign和OpenFeign的关系&#xff0c;言归正传&#xff0c;接下来我们看看OpenFeign如何设置调用超时&#xff0c;openFeign其实是有默认的超时时间的&#xff0c;默认分别是连接超时时间10秒、读超时时间60秒&#xff0c;源码在feign.Request…

Elasticsearch中object类型与nested类型以及数组之间的区别

一、区别&#xff1a; 0、一般情况下用object 类型来查es中为json对象的字段数据&#xff0c;用nested来查es中为JsonArray数组类型的字段数据。 1、默认情况下ES会把JSON对象直接映射为object类型&#xff0c;只有手动设置才会映射为nested类型 2、object类型可以直接使用普…

十九:爬虫最终篇-平安银行商城实战

平安银行商场实战 需求 获取该商城商品信息 目标网址 https://m.yqb.com/bank/product-item-50301196.html?mcId1583912328849970&loginModepab&historyy&sceneModem&traceid30187_4dXJVel1iop详细步骤 1、寻找数据接口 2、对比payload寻找可疑参数 3、多…

Day28 回溯算法part04 93. 复原IP地址 78. 子集 90. 子集 II

回溯算法part04 93. 复原IP地址 78. 子集 90. 子集 II 93. 复原 IP 地址 class Solution { private:vector<string> result;bool isValid(string& s,int start,int end){if (start > end) return false;if (s[start] 0 && start ! end) { // 0开头的数…

图像融合论文阅读:CrossFuse: 一种基于交叉注意机制的红外与可见光图像融合方法

article{li2024crossfuse, title{CrossFuse: A novel cross attention mechanism based infrared and visible image fusion approach}, author{Li, Hui and Wu, Xiao-Jun}, journal{Information Fusion}, volume{103}, pages{102147}, year{2024}, publisher{Elsevier} } 论文…

Yum(Yellowdog Updater Modified)命令大全详解

Yum&#xff08;Yellowdog Updater Modified&#xff09;是一个在基于RPM的Linux发行版上常用的包管理工具&#xff0c;主要用于自动安装、自动删除、自动升级软件包。下面列出了一些常见的Yum命令以及它们的解释&#xff1a; 安装软件包&#xff1a; yum install packageName…

当试图回复传入消息时,消息应用程序会闪烁

问题描述&#xff1a; Actual Results: Unable to reply for incoming message as Messaging app flickers and closes. Expected Results: User should be able to send reply for incoming messages. Reproduction Steps: Stay in home screen. Receive an incoming mes…

如何在 Ubuntu 20.04 上安装和使用 Docker

前些天发现了一个人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;最重要的屌图甚多&#xff0c;忍不住分享一下给大家。点击跳转到网站。 如何在 Ubuntu 20.04 上安装和使用 Docker 介绍 Docker是一个可以简化容器中应用程序进程管理过程的应用程序。…

拦截器HandlerInterceptor | springmvc系列

拦截器&#xff0c;通俗来来将&#xff0c;就是我们将访问某个路径的请求给拦截下来&#xff0c;然后可以对这个请求做一些操作 基本使用 创建拦截器类 让类实现HandlerInterceptor接口&#xff0c;重写接口中的三个方法。 Component //定义拦截器类&#xff0c;实现Handle…

如何编写kubernetes中使用的yaml文件?(基础概括版)

在操作kubernetes的过程中&#xff0c;我们经常接触到yaml文件&#xff0c;甚至有不少yaml文件超级长&#xff0c;就像在搭建集群的过程中&#xff0c;我们要用到的yaml文件&#xff0c;都是直接拷贝别人的&#xff0c;那这个yaml怎么解读&#xff1f;如果自己要写的话&#xf…

Python实现PowerPoint(PPT/PPTX)到PDF的批量转换

演示文稿是一种常见传达信息、展示观点和分享内容的形式&#xff0c;特别是PowerPoint演示文稿&#xff0c;广泛应用于各行各业&#xff0c;几乎是演讲等场合的必备工具。然而&#xff0c;演示文稿也有其限制&#xff0c;对设备的要求较高&#xff0c;且使用不同的软件或设备演…