Hystrix限流,熔断,降级入门

2024-05-16 11:32

本文主要是介绍Hystrix限流,熔断,降级入门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概念:
限流:比如我们的web系统所能承受的最大并发是500,但是在搞活动时人流量相当大,并发就可能超过我们系统的承受量,从而把系统搞崩。此时可以设置流量达到450时拒绝服务,保护系统。但是这并不友好。
熔断:服务熔断一般是指软件系统中,由于某些原因使得服务出现了过载现象,为防止造成整个重点内容系统故障,从而采用的一种保护措施,所以很多地方把熔断亦称为过载保护.
降级:当服务熔断后,快速响应用户的一种机制。如果获取订单信息失败时,返回从缓存取或直接返回用户 稍后再试。
Hystrix实现:
1.pom.xml 依赖

<dependency><groupId>com.netflix.hystrix</groupId><artifactId>hystrix-core</artifactId><version>1.5.9</version>
</dependency>

2.业务入口*重点内容*

@RequestMapping("/test")
public String test(){Object obj = new CommandUserSafe().execute();System.out.println(++i+"访问:"+(String)obj);return (String)obj;
}

3.限流,熔断,降级控制

public class CommandUserSafe extends HystrixCommand {public CommandUserSafe(){super(HystrixCommandGroupKey.Factory.asKey("userGroup"));}@Overrideprotected Object run() throws Exception {//调用真实的服务业务逻辑String user = "你好";//int a = 1/0;return user;}/** 当前调用方法发生异常时,降级执行此访问*/@Overrideprotected Object getFallback() {return "错误了";}
}

4.配置相关参数,在classpath下新建config.properties,Hystrix会自动加载此文件,如果没有就会使用默认的参数。

#########################################################
#Execution:控制HystrixCommand.run() 的如何执行
#Fallback: 控制HystrixCommand.getFallback() 如何执行
#Circuit Breaker: 控制断路器的行为
#Metrics: 捕获和HystrixCommand 和 HystrixObservableCommand 执行信息相关的配置属性
#Request Context:设置请求上下文的属性
#Collapser Properties:设置请求合并的属性
#Thread Pool Properties:设置线程池的属性
#########################################################
#执行线程数,默认10
hystrix.threadpool.default.coreSize=10
#最大执行线程数,默认10
hystrix.threadpool.default.maximumSize=10
#设置最大的BlockingQueue队列的值。如果设置-1,则使用SynchronousQueue队列,如果设置正数,则使用LinkedBlockingQueue队列
hystrix.threadpool.default.maxQueueSize=-1
#因为maxQueueSize值不能被动态修改,所有通过设置此值可以实现动态修改等待队列长度。
#即等待的队列的数量大于queueSizeRejectionThreshold时(但是没有达到maxQueueSize值),
#则开始拒绝后续的请求进入队列。
hystrix.threadpool.default.queueSizeRejectionThreshold=5#超时时间:默认1000毫秒,超过该时间会执行回退逻辑
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=1000
#是否启用超时设置,默认true
hystrix.command.default.execution.timeout.enabled=true
#是否超时中断正在执行的run,默认true
hystrix.command.default.execution.isolation.thread.interruptOnTimeout=true
#是否执行取消动作时,中断正在执行的run,默认false
hystrix.command.default.execution.isolation.thread.interruptOnCancel=false#如果超出该数,则后续的会被拒绝,如果没有实现回退逻辑的,则会抛出异常,默认10
hystrix.command.default.fallback.isolation.semaphore.maxConcurrentRequests=10
#是否当故障或者拒绝发生后,一个调用尝试调用getFallback()方法,默认true
hystrix.command.default.fallback.enabled=true#是否开启断路器功能,默认true
hystrix.command.default.circuitBreaker.enabled=true
#该属性设置滚动窗口中将使断路器跳闸的最小请求数量,默认20
#如果此属性值为20,则在窗口时间内(如10s内),如果只收到19个请求且都失败了,则断路器也不会开启。
hystrix.command.default.circuitBreaker.requestVolumeThreshold=20
#断路器跳闸后,在此值的时间的内,hystrix会拒绝新的请求,只有过了这个时间断路器才会打开闸门,默认5000
hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds=5000
#设置失败百分比的阈值。如果失败比率超过这个值,则断路器跳闸并且进入fallback逻辑,默认50
hystrix.command.default.circuitBreaker=50
#如果设置true,则强制使断路器跳闸,则会拒绝所有的请求.此值会覆盖circuitBreaker.forceClosed的值,默认false
hystrix.command.default.circuitBreaker.forceOpen=false
#如果设置true,则强制使断路器进行关闭状态,此时会允许执行所有请求,无论是否失败的次数达到,默认false
hystrix.command.default.circuitBreaker.forceClosed=false#是否开启请求缓存功能,默认值:true
hystrix.command.default.requestCache.enabled=true
#表示是否开启日志,打印执行HystrixCommand的情况和事件默认值:true
hystrix.command.default.requestLog.enabled=true#设置同时批量执行的请求的最大数量,默认int的最大值
hystrix.collapser.default.maxRequestsInBatch=
#批量执行创建多久之后,再触发真正的请求,默认10
hystrix.collapser.default.timerDelayInMilliseconds=10
#是否对HystrixCollapser.execute() 和 HystrixCollapser.queue()开启请求缓存,默认值:true
hystrix.collapser.default.requestCache.enabled=true

===================================================
参考文章:
http://blog.csdn.net/liubenlong007/article/details/76648614
http://blog.csdn.net/u012314558/article/details/78347219
https://www.cnblogs.com/li3807/p/7501427.html

这篇关于Hystrix限流,熔断,降级入门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/994787

相关文章

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

redis+lua实现分布式限流的示例

《redis+lua实现分布式限流的示例》本文主要介绍了redis+lua实现分布式限流的示例,可以实现复杂的限流逻辑,如滑动窗口限流,并且避免了多步操作导致的并发问题,具有一定的参考价值,感兴趣的可... 目录为什么使用Redis+Lua实现分布式限流使用ZSET也可以实现限流,为什么选择lua的方式实现

Python FastAPI入门安装使用

《PythonFastAPI入门安装使用》FastAPI是一个现代、快速的PythonWeb框架,用于构建API,它基于Python3.6+的类型提示特性,使得代码更加简洁且易于绶护,这篇文章主要介... 目录第一节:FastAPI入门一、FastAPI框架介绍什么是ASGI服务(WSGI)二、FastAP

Spring Cloud Hystrix原理与注意事项小结

《SpringCloudHystrix原理与注意事项小结》本文介绍了Hystrix的基本概念、工作原理以及其在实际开发中的应用方式,通过对Hystrix的深入学习,开发者可以在分布式系统中实现精细... 目录一、Spring Cloud Hystrix概述和设计目标(一)Spring Cloud Hystr

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

Redis 多规则限流和防重复提交方案实现小结

《Redis多规则限流和防重复提交方案实现小结》本文主要介绍了Redis多规则限流和防重复提交方案实现小结,包括使用String结构和Zset结构来记录用户IP的访问次数,具有一定的参考价值,感兴趣... 目录一:使用 String 结构记录固定时间段内某用户 IP 访问某接口的次数二:使用 Zset 进行

基于Redis有序集合实现滑动窗口限流的步骤

《基于Redis有序集合实现滑动窗口限流的步骤》滑动窗口算法是一种基于时间窗口的限流算法,通过动态地滑动窗口,可以动态调整限流的速率,Redis有序集合可以用来实现滑动窗口限流,本文介绍基于Redis... 滑动窗口算法是一种基于时间窗口的限流算法,它将时间划分为若干个固定大小的窗口,每个窗口内记录了该时间

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多