spring cloud 限流熔断配置

news2024/11/18 13:48:43

springcloud 微服务网关

zuul.strip-prefix=true
zuul.routes.postgres-client.path =/ps01/**
zuul.routes.postgres-client.service-id=postgres-client
zuul.routes.postgres-client02.path=/ps02/**
zuul.routes.postgres-client02.service-id=postgres-client02
zuul.semaphore.max-semaphores=100
zuul.ribbon-isolation-strategy=semaphore

@Component
public class MyRateLimiter extends ZuulFilter {

    //  令牌桶
    static RateLimiter rateLimiter
            = RateLimiter.create(8, 2, TimeUnit.SECONDS);

    @Override
    public String filterType() {
        return PRE_TYPE;
    }

    @Override
    public int filterOrder() {
        return SERVLET_DETECTION_FILTER_ORDER - 1;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public Object run() throws ZuulException {
        RequestContext context = RequestContext.getCurrentContext();
        boolean allowed = rateLimiter.tryAcquire();
        if (!allowed) {
            context.setSendZuulResponse(false);
            context.setResponseStatusCode(501);
        }
        return null;
    }
}
ribbon.eureka.enabled=true
ribbon.ReadTimeout = 10000
ribbon.ConnectTimeout= 10000
ribbon.MaxAutoRetries= 0
ribbon.MaxAutoRetriesNextServer=1
ribbon.OkToRetryOnAllOperations=false
spring.cloud.sentinel.transport.port=8719
spring.cloud.sentinel.transport.dashboard=192.168.1.4:8080
nacos-gateway.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
spring.cloud.gateway.discovery.locator.enabled=true
spring.cloud.gateway.routes[0].id=order-servicespring.cloud.gateway.routes[0].predicates[0]=Path=/order/**
spring.cloud.gateway.routes[0].uri=lb://order-service
spring.cloud.gateway.redis-rate-limiter.include-headers=true
spring.cloud.gateway.routes[0].filters[0]=RewritePath=/order(?<segment>/?.*), $\{segment}

spring.cloud.gateway.routes[0].filters[0].name=RequestRateLimiter
# 如果返回的key是空的话,则不进行限流
spring.cloud.gateway.routes[0].filters[0].args[0]=deny-empty-key=false
# 每秒产生多少个令牌
spring.cloud.gateway.routes[0].filters[0].args[1]=redis-rate-limiter.replenishRate=0
  # 1秒内最大的令牌,即在1s内可以允许的突发流程,设置为0,表示阻止所有的请求
spring.cloud.gateway.routes[0].filters[0].args[2]=redis-rate-limiter.burstCapacity=0
  # 每次请求申请几个令牌

spring.cloud.gateway.routes[0].filters[0].args[3]=redis-rate-limiter.requestedTokens=0
# 自定义限流规则
spring.cloud.gateway.routes[0].filters[0].args[0]=rate-limiter="#{@defaultGatewayRateLimiter}"
# 返回限流的key
spring.cloud.gateway.routes[0].filters[0].args[1]=key-resolver="#{@defaultGatewayKeyResolver}"
spring.cloud.gateway.routes[0].filters[0].args[2]=deny-empty-key=false
# 限流后向客户端返回的响应码429,请求太多
spring.cloud.gateway.routes[0].filters[0].args[3]=status-code=TOO_MANY_REQUESTS
# 每次请求申请几个令牌  default-gateway-rate-limiter 的值是在 defaultGatewayRateLimiter 中定义的
spring.cloud.gateway.routes[0].filters[0].args[4]=default-gateway-rate-limiter.requestedTokens=1

1.使用hystrix

@HystrixCommand(
        commandKey = "saveStudent",
        commandProperties = {
                @HystrixProperty(name="execution.isolation.strategy",value = "THREAD")
        },
        threadPoolKey = "saveStudent",
        threadPoolProperties = {
                @HystrixProperty(name= CORE_SIZE,value = "3"),
                @HystrixProperty(name= MAX_QUEUE_SIZE,value = "5"),
                @HystrixProperty(name= QUEUE_SIZE_REJECTION_THRESHOLD,value = "7"),
                @HystrixProperty(name = CIRCUIT_BREAKER_ENABLED, value = "true"),// 是否开启断路器
                @HystrixProperty(name = CIRCUIT_BREAKER_REQUEST_VOLUME_THRESHOLD, value = "10"),// 请求次数
                @HystrixProperty(name = CIRCUIT_BREAKER_SLEEP_WINDOW_IN_MILLISECONDS, value = "10000"), // 时间窗口期
                @HystrixProperty(name = CIRCUIT_BREAKER_ERROR_THRESHOLD_PERCENTAGE, value = "60"),
                @HystrixProperty(name = EXECUTION_ISOLATION_THREAD_TIMEOUT_IN_MILLISECONDS, value = "4000"),
                //统计滚动窗口的持续时间,以毫秒为单位。
                // 该时间用于断路器判断健康度时需要收集信息的持续时间,断路器在收集指标信息的时候会根据设置的时间窗长度拆分成多个“桶”来累计各个度量值,每个“桶”记录一段时间内的采集指标。)
                @HystrixProperty(name = METRICS_ROLLING_STATS_TIME_IN_MILLISECONDS, value = "10000")
        },
        fallbackMethod = "saveStudent"
    )

feign.hystrix.enabled=true
hystrix.threadpool.default.coreSize=100 #并发执行的最大线程数,默认10
hystrix.threadpool.default.maxQueueSize=5  #BlockingQueue的最大队列数,当设为-1,会使用 SynchronousQueue,值为正时使用LinkedBlcokingQueue。该设置只会在初始化时有效,之后不能修改
hystrix.threadpool.default.queueSizeRejectionThreshold=1 #即使maxQueueSize没有达到,达到queueSizeRejectionThreshold该值后,请求也会被拒绝。因为maxQueueSize不能被动态修改,这个参数将允许我们动态设置该值。if maxQueueSize == ?1,该字段将不起作用
hystrix.command.default.execution.isolation.strategy=SEMAPHORE #隔离策略,默认是Thread, 可选Thread|Semaphor
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=1000  #命令执行超时时间,默认1000ms
hystrix.command.default.execution.timeout.enabled=true #执行是否启用超时,默认启用true
hystrix.command.default.execution.isolation.strategy.semaphore.max-semaphores=100

ribbon 的负载均衡测罗

service-B.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
ribbon.eureka.enabled=true
ribbon.ReadTimeout = 10000
ribbon.ConnectTimeout= 10000
ribbon.MaxAutoRetries= 0
ribbon.MaxAutoRetriesNextServer=1
ribbon.OkToRetryOnAllOperations=false

public class GlobalRule implements IRule {

    private ILoadBalancer iLoadBalancer;

    @Override
    public Server choose(Object o) {
        List<Server> servers = iLoadBalancer.getAllServers();
        return servers.get(0);
    }

    @Override
    public void setLoadBalancer(ILoadBalancer iLoadBalancer) {
        this.iLoadBalancer = iLoadBalancer;
    }

    @Override
    public ILoadBalancer getLoadBalancer() {
        return this.iLoadBalancer;
    }
}

sentinel 限流熔断

sentinel 配置

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-apollo</artifactId>
            <version>1.8.0</version>
        </dependency>
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
management.endpoints.web.exposure.include=*
spring.cloud.sentinel.transport.port=8719
spring.cloud.sentinel.transport.dashboard=localhost:8480
feign.sentinel.enabled=true
#spring.cloud.sentinel.datasource.ds.file.file=classpath:flowrule.json
#spring.cloud.sentinel.datasource.ds.file.data-type=json
#spring.cloud.sentinel.datasource.ds2.file.rule-type=flow
spring.cloud.sentinel.datasource.ds2.apollo.namespace-name=application
spring.cloud.sentinel.datasource.ds2.apollo.flow-rules-key=flowRules
spring.cloud.sentinel.datasource.ds2.apollo.default-flow-rule-value=[]
spring.cloud.sentinel.datasource.ds2.apollo.rule-type=flow
@SentinelResource(value = "sayHello",blockHandler ="handleException",blockHandlerClass = ExceptionUtil.class)
Field   说明 默认值
resource   资源名,资源名是限流规则的作用对象
count  限流阈值
grade  限流阈值类型,QPS 或线程数模式  QPS 模式
limitApp   流控针对的调用来源  default,代表不区分调用来源
strategy   判断的根据是资源自身,还是根据其它关联资源 (refResource),还是根据链路入口   根据资源本身
controlBehavior    流控效果(直接拒绝 / 排队等待 / 慢启动模式)  直接拒绝

在Spring Cloud Sentinel中,降级(degrade)是指当资源被大量调用,且每个调用都执行了较长时间,为了保护系统不被打垮,Sentinel会对资源进行降级处理,即停止该资源的访问。降级规则可以通过以下参数进行配置:
Field  说明 默认值
grade:降级规则的级别,分为0(允许),1(警告),2(错误)。
count:触发降级的最小请求数。
timeWindow:时间窗口,单位为毫秒,请求次数在这个时间窗口内达到阈值则触发降级。
minRequestAmount:降级后每分钟允许的最小请求数,用于自动恢复服务。
slowRatioThreshold:慢请求比例阈值,当慢请求比例超过这个值就会进行降级。
statIntervalMs:统计时间窗口,用于计算慢请求比例,单位为毫秒。

flow 规则

[
  {
    "resource": "sayHello",
    "controlBehavior": 0,
    "count": 1,
    "grade": 1,
    "limitApp": "default",
    "strategy": 0
  }
]

 degrade.json

[{
        "resource": "sayHello",
        "count": 100.0,
        "timeWindow": 10,
        "grade": 1,
        "countType": 1
}]

zuul 源码解析

ribbon源码解析

zuul 的四种filterType: pre post error route
  1. 动态路由:route

  2. 流量控制和负载均衡,权限验证:pre

  3. 请求日志记录:post

  4. 异常处理:error

hystrix

gateway 源码解析

sentinel 源码解析

遇到问题解决方式

springcloud 2020.0.3重大改变

当前组件  替代品

Hystrix  Resilience4j

Hystrix Dashboard / Turbine  Micrometer + Monitoring System

Ribbon  Spring Cloud Loadbalancer

Zuul 1    Spring Cloud Gateway

Archaius 1  Spring Boot external config + Spring Cloud Config

以下模块已从spring-cloud-netflix中删除:

spring-cloud-netflix-archaius
spring-cloud-netflix-concurrency-limits
spring-cloud-netflix-core
spring-cloud-netflix-dependencies
spring-cloud-netflix-hystrix
spring-cloud-netflix-hystrix-contract
spring-cloud-netflix-hystrix-dashboard
spring-cloud-netflix-hystrix-stream
spring-cloud-netflix-ribbon
spring-cloud-netflix-sidecar
spring-cloud-netflix-turbine
spring-cloud-netflix-turbine-stream
spring-cloud-netflix-zuul
spring-cloud-starter-netflix-archaius
spring-cloud-starter-netflix-hystrix
spring-cloud-starter-netflix-hystrix-dashboard
spring-cloud-starter-netflix-ribbon
spring-cloud-starter-netflix-turbine
spring-cloud-starter-netflix-turbine-stream
spring-cloud-starter-netflix-zuul
Support for ribbon, hystrix and zuul was removed across the release train projects.                

 获取接口start.spring.io/actuator/info

maven地址Maven Repository: org.mybatis.spring.boot » mybatis-spring-boot-starter » 2.2.2 (mvnrepository.com)

https://start.aliyun.com/

参考文献

Sentinel 流量控制限流框架详解_限流框架sentinel-CSDN博客

在生产环境中使用 Sentinel · alibaba/Sentinel Wiki · GitHub

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

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

相关文章

主流公链 - BSC

探索Binance Smart Chain (BSC) 区块链&#xff1a;实现高性能的智能合约平台 1. BSC 简介 Binance Smart Chain (BSC)是由全球领先的加密货币交易平台币安&#xff08;Binance&#xff09;推出的智能合约平台。它旨在为开发者提供高性能、低成本的区块链基础设施&#xff0c;…

助力福建新型职业农民培育 北方天途推进无人机植保应用培训

为加强新型职业农民的职业培育&#xff0c;扩展新型农民的知识范围和专业技术水平&#xff0c;推进农业供给侧结构性改革。日前&#xff0c;在农业部门的大力支持下&#xff0c;北方天途航空和宁德天禾科技服务携手为福建省农民朋友开展了植保无人机驾驶员的应用培训。福建省农…

数据分析面试题(41~50)

41、lstm的原理、lstm和rnn的区别 ①LSTM是一种常用于处理序列数据的循环神经网络&#xff08;RNN&#xff09;架构&#xff0c;特别适用于长序列的建模。其主要特点是通过门控机制来控制信息的流动&#xff0c;从而有效地解决了传统RNN在处理长序列时的梯度消失或爆炸的问题。…

【Java程序设计】【C00374】基于(JavaWeb)Springboot的社区疫情管理系统(有论文)

TOC 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;博客中有上百套程序可供参考&#xff0c;欢迎共同交流学习。 项目简介 项目获取 &#x1f345;文末点击卡片…

【数据分享】1929-2023年全球站点的逐日平均压力(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2023年全球气象站…

【gitee】设置忽略文件.gitignore的方法

已经提交在 gitee 上的文件&#xff0c;再设置忽略文件.gitignore&#xff0c;怎么成立 忽略已经提交的文件&#xff0c;可以使用以下命令将这些文件从Git中移除&#xff08;但是保留在本地文件系统中&#xff09;&#xff1a; git rm --cached <file_name>//例&#x…

揭秘YouTube视频世界:利用Python和Beautiful Soup的独特技术

介绍 YouTube作为全球最大的视频分享平台&#xff0c;每天有数以亿计的视频被上传和观看。对于数据分析师、市场营销人员和内容创作者来说&#xff0c;能够获取YouTube视频的相关数据&#xff08;如标题、观看次数、喜欢和不喜欢的数量等&#xff09;是非常有价值的。本文将介…

iOS - Runtime - Class的结构

文章目录 iOS - Runtime - Class的结构前言1. Class的结构1.1 Class的结构1.1.1 objc_class1.1.2 class_rw_t1.1.3 class_ro_t 1.2 class_rw_t和class_ro_t的区别1.3 class_rw_t和class_ro_t的关系1.3.1 分析关系1.3.2 原因 1.4 method_t1.4.1 Type Encoding1.4.2 types iOS - …

双亲委派机制总结

回顾了一下双亲委派机制&#xff0c;在这记录记录&#xff0c;下一篇会基于打破双亲委派机制来更新 1. 类加载&#xff1a; 多个java文件经过编译打包后生成可运行jar包&#xff0c;最后启动程序。首先需要通过类加载器把主类加载到JVM。主类在运行过程中如果使用到其他类&a…

Spring Boot 整合分布式搜索引擎 Elastic Search 实现 自动补全功能

文章目录 ⛄引言一、分词器⛅拼音分词器⚡自定义分词器 二、自动补全查询三、自动补全⌚业务需求⏰实现酒店搜索自动补全 四、效果图⛵小结 ⛄引言 本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;…

华为云服务器租用价格_云服务器优惠活动_2024年新版报价

2024年华为云服务器租用价格表&#xff0c;云服务器优惠价格35元一年&#xff0c;配置为1核2G1M带宽HECS云服务器、L实例-2核2G3M配置46元1年、4核16G10M华为云服务器24元一个月、2核4G5M服务器158元一年&#xff0c;3年1010元、华为云香港服务器99元一年、增强型C7云服务器4核…

ReActor丨一文教你学会用Stable Diffusion插件换脸

本教程将带您了解如何下载和使用 stable diffusion 的 ReActor扩展&#xff0c;实现完美的换脸效果。 ReActor 是一个强大的工具&#xff0c;允许您无缝地交换面孔并获得逼真的效果。 无论您是艺术家、内容创作者&#xff0c;还是仅仅想要体验图像操作的乐趣&#xff0c;这份…

纯前端网页播放20路海康威视、大华RTSP视频流,调用双显卡GPU加速

关于网页播放摄像头RTSP视频流&#xff0c;网上有很多免费开源方案&#xff0c;大多数是通过把在服务器端RTSP转码成HLS或者RTMP等前端可以播放的视频流&#xff0c;然后推到前端播放&#xff0c;但是大多数延迟非常高&#xff08;比如&#xff1a;HLS延迟达到十几秒&#xff0…

Python - 生成可执行文件.exe(附操作完整流程)

文章目录 一、打包工具 - pyinstaller1.1 pyinstaller 原理 二、pyinstaller 安装2.1 管理员身份运行“CMD”-命令提示符2.2 安装2.3 查询是否安装成功 三、pyinstaller 打包可执行文件3.1 进入需要打包的脚本目录3.2 打包脚本3.3 打包结果 四、总结 一、打包工具 - pyinstalle…

Chrome 插件各模块之间的消息传递

Chrome 插件各模块之间的消息传递 一、消息传递 1. 消息传递分类 Chrome 插件的 Action、Background 和 content_script 三个模块之间的信息传输插件和插件之间的信息传输网页向插件进行信息传输与原生应用进行消息传递 2. 消息传递 API runtime API runtime.sendMessage(…

文件操作函数

目录 前言 一、顺序读写函数 1、fgetc 和 fputc 2、fgets 和 fputs 3、fprintf 和 fscanf 4、sscanf 和 sprintf 5、fwrite 和 fread 二、随机读写函数 1、fseek 2、ftell 3、rewind 前言 本章我们学习一下文件操作相关的各种函数 一、顺序读写函数 1、fgetc 和 fpu…

【小黑送书—第十四期】>>重磅升级——《Excel函数与公式应用大全》(文末送书)

今天给大家带来AI时代系列书籍&#xff1a;《Excel 2019函数与公式应用大全》全新升级版&#xff0c;Excel Home多位微软全球MVP专家打造&#xff0c;精选Excel Home海量案例&#xff0c;披露Excel专家多年研究成果&#xff0c;让你分分钟搞定海量数据运算&#xff01; 由北京…

C语言数据结构基础————二叉树学习笔记(四)简单的OJ题目练习

1.单值二叉树 965. 单值二叉树 - 力扣&#xff08;LeetCode&#xff09; 建立一个新的函数&#xff0c;用函数传参的方法来记录val的值 如上一篇最后的对称二叉树的习题&#xff0c;建立新的函数来传参 多采用使用反对值的方法&#xff0c;因为如果是相等return true的话&am…

单臂路由和三层交换机

目录 一.单臂路由 1.单臂路由的工作原理 2.单臂路由的配置 2.1画出拓扑图 2.2配置PC 2.3配置交换机 2.4配置路由器 2.5测试 二.三层交换机 1.三层交换机的概述 2.三层交换机的配置 2.1画出拓扑图 2.2配置PC 2.3配置二层交换机 2.4配置三层交换机 2.5测试 3.拓展 三.总结 一.…

基于nodejs+vue学院个人信息管理系统python-flask-django-php

随着社会的发展&#xff0c;学院个人信息的管理形势越来越严峻。越来越多的用户利用互联网获得信息&#xff0c;但学院个人信息鱼龙混杂&#xff0c;信息真假难以辨别。为了方便用户更好的获得学院个人信息&#xff0c;因此&#xff0c;设计一种安全高效的学院个人信息管理系统…