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

相关文章

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

springboot2.1.3 hystrix集成及hystrix-dashboard监控详解

《springboot2.1.3hystrix集成及hystrix-dashboard监控详解》Hystrix是Netflix开源的微服务容错工具,通过线程池隔离和熔断机制防止服务崩溃,支持降级、监... 目录Hystrix是Netflix开源技术www.chinasem.cn栈中的又一员猛将Hystrix熔

Java List 使用举例(从入门到精通)

《JavaList使用举例(从入门到精通)》本文系统讲解JavaList,涵盖基础概念、核心特性、常用实现(如ArrayList、LinkedList)及性能对比,介绍创建、操作、遍历方法,结合实... 目录一、List 基础概念1.1 什么是 List?1.2 List 的核心特性1.3 List 家族成

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

史上最全MybatisPlus从入门到精通

《史上最全MybatisPlus从入门到精通》MyBatis-Plus是MyBatis增强工具,简化开发并提升效率,支持自动映射表名/字段与实体类,提供条件构造器、多种查询方式(等值/范围/模糊/分页... 目录1.简介2.基础篇2.1.通用mapper接口操作2.2.通用service接口操作3.进阶篇3

Python自定义异常的全面指南(入门到实践)

《Python自定义异常的全面指南(入门到实践)》想象你正在开发一个银行系统,用户转账时余额不足,如果直接抛出ValueError,调用方很难区分是金额格式错误还是余额不足,这正是Python自定义异... 目录引言:为什么需要自定义异常一、异常基础:先搞懂python的异常体系1.1 异常是什么?1.2

基于Redisson实现分布式系统下的接口限流

《基于Redisson实现分布式系统下的接口限流》在高并发场景下,接口限流是保障系统稳定性的重要手段,本文将介绍利用Redisson结合Redis实现分布式环境下的接口限流,具有一定的参考价值,感兴趣... 目录分布式限流的核心挑战基于 Redisson 的分布式限流设计思路实现步骤引入依赖定义限流注解实现

Python实现Word转PDF全攻略(从入门到实战)

《Python实现Word转PDF全攻略(从入门到实战)》在数字化办公场景中,Word文档的跨平台兼容性始终是个难题,而PDF格式凭借所见即所得的特性,已成为文档分发和归档的标准格式,下面小编就来和大... 目录一、为什么需要python处理Word转PDF?二、主流转换方案对比三、五套实战方案详解方案1:

Spring WebClient从入门到精通

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