Spring Cloud GateWay整合熔断器实现限流

其实网关是很强大,能做的事情很多,包含很多过滤器包括限流,具体的网关可以参考我的另外一篇博文Spring Cloud GateWay-过滤器

今天我们来说下网关如何限流,主要两种方案:

Spring Cloud GateWay整合hystrx

environment: test
management:security:enabled: false
spring:jackson:date-format: yyyy-MM-dd HH:mm:ssdefault-property-inclusion: NON_NULLtime-zone: GMT+8servlet:multipart:file-size-threshold: 100MBmax-file-size: 4GBmax-request-size: 4GBthymeleaf:cache: falsemode: LEGACYHTML5cloud:# 服务发现nacos:discovery:server-addr: nacos-headless.ota.svc.cluster.local:8848 #服务端urlnamespace: ota-prdgateway:discovery:locator:enabled: trueenabled: trueroutes:# 公共服务 基础数据 base服务- id: vota-api-coreuri: lb://vota-api-corepredicates:- Path=/mgapi/vota-api-core/**filters:- name: Hystrixargs:name: vota-api-corefallbackUri: forward:/fallback- name: StripPrefixargs:parts: 2- name: SessionAccessargs:ignorePath:- /mgapi- /static- /client-api- /busi- /zuulvota-api-core:ribbon:ConnectTimeout: 500MaxAutoRetries: 0MaxAutoRetriesNextServer: 1OkToRetryOnAllOperations: trueReadTimeout: 3600000hystrix:command:vota-api-core:execution:isolation:thread:timeoutInMilliseconds: 2401000

上面的代码块通过熔断器这种超时实现,其实上面这样的配置是不会生效的,通过配置文件其实想要通过hystrx的线程隔离模式,但是呢,这样的配置不会生效的,这个地方很多人都会陷入误区,首先呢,hystrx在springcloud中要不被feign整合,要不被gateway整合,前者默认是线程池,后置默认是信号量,具体两者的区别,信号量是单线程不会涉及到header上下文传递,但是呢性能不好,线程池呢会涉及到上下文传递问题,这个地方我就不会扩散了

线程池资源隔离模式

hystrix:command:vota-api-core:execution:isolation:strategy: THREADtimeoutInMilliseconds: 2401000

这样明确指定了隔离模式才行,否则还是走的默认的,而且只有线程池资源隔离才会有超时概念,否则信号量资源隔离是没有的 ,只有并发数的配置

信号量资源隔离模式

hystrix:command:vota-api-core:execution:isolation:strategy: SEMAPHOREsemaphore:maxConcurrentRequests: 10timeoutInMilliseconds: 2401000

这里默认是10,可以调整的50/100,上面这两种配置都是整合hystrx的,但是目前hystrx是Netflix旗下的组建以及不维护了,现在启用的都是CircuitBreaker

spring:application:name: vota-api-gatewaycloud:gateway:discovery:locator:# 表明 Gateway 开启服务注册和发现的功能,并且 Spring Cloud Gateway 自动根据服务发现为每一个服务创建了一个 router,这个 router 将以服务名开头的请求路径转发到对应的服务enabled: true# 是将请求路径上的服务名配置为小写(因为服务注册的时候,向注册中心注册时服务名被转成大写了)lower-case-service-id: trueroutes:- id: vota-api-proxyuri: lb://vota-api-core/v50/vehicle/api/predicates:# - Path=/v50/vehicle/api/register,/v50/vehicle/api/{segment}/current/time- Path=/v50/vehicle/api/**- Method=POSTfilters:- name: CircuitBreakerargs:name: fallbackCmdAfallbackUri: forward:/fallbackA- name: RequestRateLimiterargs:# 解析限流 Key 的 Bean 对象的名字,使用 SpEL 表达式key-resolver: '#{@vehicleKeyResolver}'# 限流实现rate-limiter: '#{@redisRateLimiter}'# 令牌桶每秒填充平均速率redis-rate-limiter.replenishRate: 2000# 令牌桶总容量redis-rate-limiter.burstCapacity: 5000
    public static void main(String[] args) {SpringApplication.run(VehicleGatewayApplication.class, args);}/*** <p>限流和防重放的区别,分别的定义</p>* <p>令牌桶限流</p>* <p>注册接口使用 REGISTER + vin 作为 Key</p>* <p>非注册接口使用 API_NAME + deviceId 作为 Key</p>* <p>令牌桶算法基于 Lua + Redis 实现,Lua 脚本位置为:spring-cloud-gateway-core-2.1.5.RELEASE* .jar/META-INF/scripts/request_rate_limiter.lua</p>* <p>如需自定义算法,则继承 AbstractRateLimiter 类</p>** @return KeyResolver* @see org.springframework.cloud.gateway.filter.ratelimit.RedisRateLimiter* @see org.springframework.cloud.gateway.filter.factory.RequestRateLimiterGatewayFilterFactory*/@Beanpublic KeyResolver vehicleKeyResolver() {return exchange -> {String value = exchange.getRequest().getPath().value();return Mono.just(exchange.getRequest().getPath().value());};}

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

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

相关文章

PCBA方案设计充气泵设计

随着科技的不断进步&#xff0c;充气泵在户外活动、露营和旅行中变得越来越常见。而充气泵的性能和稳定性主要依赖于其控制系统&#xff0c;其中芯片的设计和开发是充气泵方案的关键。SIC8833芯片是一款专门为充气泵设计的芯片&#xff0c;接下来我们来讲下充气泵方案芯片SIC88…

计网Lesson19 - 应用层之WWW

文章目录 1. 应用层概念1.1 应用层协议的定义 2. 应用层体系结构2.1 客户/服务器模式2.2 P2P模式&#xff08;点对点方式&#xff09; 3. 万维网3.1 概述3.2 统一资源定位符3.3 万维文档HTMLCSSJavaScript 1. 应用层概念 应用层是计算机网络体系结构的最顶层&#xff0c;是设计…

面试官:Spring Boot 是否可以使用 XML 配置?如果可以的话怎么配置

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring Boot 是否可以使用 XML 配置?如果可以的话怎么配置 Spring Boot 主要推崇使用注解驱动的 Java 配置方式,尤其是通过 @Configuration、@C…

USACO 2023 December, SilverProblem 1. Bovine Acrobatics题解

有n件物品&#xff0c;m组叠罗汉&#xff0c;相邻罗汉差值至少为k。 第i件物品的重量和数量 由于m最大范围为1e9&#xff0c;开辟m组罗汉槽存储罗汉值&#xff0c;内存空间不够。 分析样例&#xff1a; 3 5 2 9 4 7 65 5 一开始我想的是层数&#xff0c;但是一层中存在数据…

初学Vue——Vue路由

0 什么是Vue路由 类似于Html中的超链接(<a>)一样&#xff0c;可以跳转页面的一种方式。 前端路由&#xff1a;URL中hash(#号之后的内容)与组件之间的对应关系&#xff0c;如下图&#xff1a; 当我们点击左侧导航栏时&#xff0c;浏览器的地址栏会发生变化&#xff0c;路…

python的数据容器--元组

元组的定义 #元组的定义 t1 (1,"hello",True) t2() t3tuple() t4("hello",) print(f"t4的数据类型{type(t4)},t4的内容是{t4}")#元组的嵌套使用 t5((1,2,3),(4,5,6)) print(f"t5的类型是{type(t5)}")#元组的元素提取 print(f"{t…

【Prometheus】k8s集群部署node-exporter

​ 目录 一、概述 1.1 prometheus简介 1.2 prometheus架构图 1.3 Exporter介绍 1.4 监控指标 1.5 参数定义 1.6 默认启用的参数 1.7 prometheus如何收集k8s/服务的–三种方式收集 二、安装node-exporter组件 【Prometheus】概念和工作原理介绍-CSDN博客 【云原生】ku…

借助 Terraform 功能协调部署 CI/CD 流水线-Part2

在第一部分的文章中&#xff0c;我们介绍了3个步骤&#xff0c;完成了教程的基础配置&#xff1a; 使用 Terraform 创建 AWS EKS Infra在 EKS 集群上部署 ArgoCD 及其依赖项设置 Bitbucket Pipeline并部署到 ECR Repo 本文将继续完成剩余的步骤&#xff0c;以实现 Terraform 编…

windows下pytorch的dataloader多进程(num_workers)问题,为何num_workers的值只能为0?

问题背景介绍 本人是windows系统&#xff0c;在使用torch.utils.data.Dataloader加载torchvision中的数据集时&#xff0c;将其中的形参num_workers设置为了大于0的数&#xff0c;然后出现以下错误。 原因 在 Windows 系统下&#xff0c;num_workers 参数在使用 PyTorch 的 t…

做58代运营到底有没有效果?

58同城代运营有没有效果&#xff0c;其实还是取决于你的产品、预算和想要达到的效果。比如&#xff0c;你是希望通过代运营做出品牌效应&#xff0c;还是希望提升销量&#xff1f;代运营能够带来的效果&#xff0c;主要是咨询和品牌推广&#xff0c;这两个都可以量化&#xff0…

解决Iterm2升级后遇到“Stashed changes“的问题

&#xff1c;&#xff1c;&#xff1c;&#xff1c;&#xff1c;&#xff1c;&#xff1c; Updated upstream ...... &#xff1e;&#xff1e;&#xff1e;&#xff1e;&#xff1e;&#xff1e;&#xff1e; Stashed changes冲突标记符的代码如题&#xff0c;最近有升级Item2…

终于搞懂lSTM的原理了

LSTM简介 一个目前很火的特殊的RNN结构&#xff0c; 有效解决了RNN的梯度爆炸和长序列记忆问题 优势 LSTM 通过引入遗忘门、输入门、输出门&#xff0c; 来实现对特殊特征的记忆和遗忘&#xff0c;来达到更好的对序列数据的处理和记忆效果。 原理图&#xff1a; 总结公式…

校园小情书微信小程序源码 | 社区小程序前后端开源 | 校园表白墙交友小程序

项目描述&#xff1a; 校园小情书微信小程序源码 | 社区小程序前后端开源 | 校园表白墙交友小程序 功能介绍&#xff1a; 表白墙 卖舍友 步数旅行 步数排行榜 情侣脸 漫画脸 个人主页 私信 站内消息 今日话题 评论点赞收藏 服务器环境要求&#xff1a;PHP7.0 MySQL5.7 效果…

Java设计模式-策略模式

策略模式1 概述2 结构3 案例实现4 优缺点5 使用场景6 JDK源码解析 策略模式 1 概述 先看下面的图片&#xff0c;我们去旅游选择出行模式有很多种&#xff0c;可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。 作为一个程序猿&#xff0c;开发需要选择一款开发工具&#x…

CircuitBreaker断路器(服务熔断,服务降级)

分布式系统面临的问题: 复杂分布式体系结构中的应用程序有数十个依赖关系&#xff0c;每个依赖关系在某些时候将不可避免地失败。 1.服务雪崩 多个微服务之间调用的时候&#xff0c;假设微服务A调用微服务B和微服务C&#xff0c;微服务B和微服务C又调用其它的微服务&#xff…

PyCharm无代码提示解决

PyCharm无代码提示解决方法 在使用PyCharm工具时&#xff0c;调用方法却无法进行提示&#xff0c;针对PyCharm无代码提示整理下解决方案 1、Python内置语法无智能提示 复现&#xff1a;我这里以urllib库读取网页内容为例&#xff0c;在通过urlopen(&#xff09;之后调用getur…

Tomcat Web 开发项目构建教程

1下载Tomcat安装包&#xff0c;下载链接&#xff1a;Apache Tomcat - Welcome!&#xff0c;我电脑环境为JDK8,所以下载Tomcat9.0 2、下载完压缩包后&#xff0c;解压到指定位置 3.在intelij中新建一个项目 4.选中创建的项目&#xff0c;双击shift&#xff0c;输入add frame...然…

C语言实现贪吃蛇

前言&#xff1a;今天给大家详细介绍一下小游戏贪吃蛇的代码。 目录 一 .贪吃蛇实现的功能 二.贪吃蛇游戏设计与分析 1.贪吃蛇以及贪吃蛇所需要维护的数据 &#xff08;1&#xff09;贪吃蛇蛇体 &#xff08;2&#xff09;数据维护 2.地图设计 &#xff08;1&#x…

three.js 按键W前进、S退后、A左转、D右转运动

效果&#xff1a;W 键 前进&#xff1b;S 键后退&#xff1b;A 键左转&#xff1b;D 键右转&#xff1b;使用了 tween.js 动画库&#xff1b; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left">&…

如何利用AWS CloudFront 自定义设置SSL

Amazon CloudFront 提供三种选项&#xff0c;可以加速整个网站并从 CloudFront 的边缘站点通过安全的 HTTPS 方式交付内容。除能够安全地从边缘站点交付内容外&#xff0c;您还可以配置 CDN 来使用针对源提取的 HTTPS 连接&#xff0c;这样您的数据就会实现从源到最终用户的端到…