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

相关文章

基于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 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

C语言指针入门 《C语言非常道》

C语言指针入门 《C语言非常道》 作为一个程序员,我接触 C 语言有十年了。有的朋友让我推荐 C 语言的参考书,我不敢乱推荐,尤其是国内作者写的书,往往七拼八凑,漏洞百出。 但是,李忠老师的《C语言非常道》值得一读。对了,李老师有个官网,网址是: 李忠老师官网 最棒的是,有配套的教学视频,可以试看。 试看点这里 接下来言归正传,讲解指针。以下内容很多都参考了李忠老师的《C语言非

MySQL入门到精通

一、创建数据库 CREATE DATABASE 数据库名称; 如果数据库存在,则会提示报错。 二、选择数据库 USE 数据库名称; 三、创建数据表 CREATE TABLE 数据表名称; 四、MySQL数据类型 MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串类型 4.1 数值类型 数值类型 类型大小用途INT4Bytes整数值FLOAT4By