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 WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

从入门到精通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 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务