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

相关文章

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

MySQL DQL从入门到精通

《MySQLDQL从入门到精通》通过DQL,我们可以从数据库中检索出所需的数据,进行各种复杂的数据分析和处理,本文将深入探讨MySQLDQL的各个方面,帮助你全面掌握这一重要技能,感兴趣的朋友跟随小... 目录一、DQL 基础:SELECT 语句入门二、数据过滤:WHERE 子句的使用三、结果排序:ORDE

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能

《POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能》ApachePOI是一个流行的Java库,用于处理MicrosoftOffice格式文件,提供丰富API来创建、读取和修改O... 目录前言:Apache POIEasyPoiEasyExcel一、EasyExcel1.1、核心特性

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚