小D课堂 - 新版本微服务springcloud+Docker教程_5-06 高级篇幅之深入源码
笔记
6、高级篇幅之深入源码剖析Hystrix降级策略和调整
简介:源码分析Hystrix降级策略和调整
1、查看默认讲解策略 HystrixCommandProperties
1)execution.isolation.strategy 隔离策略
THREAD 线程池隔离 (默认)
SEMAPHORE 信号量
信号量适用于接口并发量高的情况,如每秒数千次调用的情况,导致的线程开销过高,通常只适用于非网络调用,执行速度快
2)execution.isolation.thread.timeoutInMilliseconds 超时时间
默认 1000毫秒
3)execution.timeout.enabled 是否开启超时限制 (一定不要禁用)
4)execution.isolation.semaphore.maxConcurrentRequests 隔离策略为 信号量的时候,如果达到最大并发数时,后续请求会被拒绝,默认是10
官方文档:
https://github.com/Netflix/Hystrix/wiki/Configuration#execution.isolation.strategy
2、调整策略
超时时间调整
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 4000
开始
模拟商品服务响应慢。sleep2秒

orderService调用商品服务
服务都启动正常为什么还超时了呢???这是因为feign默认的超时机制

hystrix里面本身有一个熔断降级。这里把readTimeout设置为4秒

重新调用,一样还是会出问题

光靠设置feign的超时时间是不行的,因为我们用了熔断。就需要分析hyxtrix的超时策略。
点进去@HystrixCommand这个注解


点击后左边就有对应的列表

找到HystrixCommandProperties

默认的注解的配置

构造函数里面有很多的配置项。这里我们参考官方文档
https://github.com/Netflix/Hystrix/wiki/Configuration#execution.isolation.strategy
execution.isolation.strategy:隔离策略
下面看的是这个官方文档、:https://github.com/Netflix/Hystrix/wiki
一个服务调用其他关联的服务

如果某一天I服务特别慢,那么所有的请求都堆积到这里了

tomcat是有线程池的,所有的线程都会在这里卡主,别的请求进不来。导致整个系统不可用
1千个线程池平均分配没个请求250个 ,当有请求卡主的服务最多只能调用250个线程。其他的线程还可以使用。不会都卡在这一个服务里面,这样就是线程池隔离。

回到HystrixCommandProperties

默认策略点进去:Default_executionIsolationsStrategy




默认的策略是线程。

一个是线程一个是信号量


超时时间
execution.timeout.enabled
搜索关键字

对应的值在这里。默认是1000毫秒,也就是1秒。

execution.timeout.enabled 是否开启超时限制 (一定不要禁用)
任何一个服务一定不要关闭超时时间,一定要设置一个超时时间。
默认是开启的。任何一个服务肯定有出问题的时候,肯定不能无限的链接。链接会被耗尽

execution.isolation.semaphore.maxConcurrentRequests 隔离策略为 信号量的时候,如果达到最大并发数时,后续请求会被拒绝,默认是10
官方文档搜索关键字都有对应的说明

设置
可以在入口类里面,注解上加属性CommandProperties里面设置。但是这么设置不友好。这里不用这种方式、
我们使用配置文件的方式去设置,为了解决刚才调用超时的问题
有几种方式,第一种可以直接关闭超时时间

这里的配置没什么提示,笔记内写好了直接复制过去就可以了



再次调用,超时时间已经关闭,所以这里没问题。

另外一种方式-修改超时时间

超时时间设置为4秒

测试

请求耗时2秒多

小D课堂 - 新版本微服务springcloud+Docker教程_5-06 高级篇幅之深入源码的更多相关文章
- 小D课堂 - 新版本微服务springcloud+Docker教程_汇总
小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介 小D课堂 - 新版本微服务springcloud+Docker教程_1_02技术选型 小D课堂 - 新版本微服务s ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介
笔记 ============================================= SpringCloud课程笔记.txt 第一章 课程介绍和学习路线 1.微服务架构SpringClou ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_3-04 SpringCloud微服务核心组件Eureka介绍和闭源后影响
笔记 4.SpringCloud微服务核心组件Eureka介绍和闭源后影响 简介: SpringCloud体系介绍 官方地址:http://projec ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_3-01 什么是微服务的注册中心
笔记 第三章 SpringCloud核心组件注册中心 1.什么是微服务的注册中心 简介:讲解什么是注册中心,常用的注册中心有哪些 (画图) 理解注册中心:服务 ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_2_04微服务下电商项目基础模块设计
笔记 4.微服务下电商项目基础模块设计 简介:微服务下电商项目基础模块设计 分离几个模块,课程围绕这个基础项目进行学习 小而精的方式学习微服务 1.用户服务 ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_2_03常见的微服务框架
笔记 3.常见的微服务框架 简介:讲解常用的微服务框架 consumer: 调用方 provider: 被调用方 一个接口一般都会充当两个角色(不是同时充当) ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_6-06 zuul微服务网关集群搭建
笔记 6.Zuul微服务网关集群搭建 简介:微服务网关Zull集群搭建 1.nginx+lvs+keepalive https://www.cnblogs.com/liuyisai/ ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_6-03 高级篇幅之zuul常用问题分析
笔记 3.高级篇幅之Zuul常用问题分析和网关过滤器原理分析 简介:讲解Zuul网关原理和过滤器生命周期, 1.路由名称定义问题 路由映射重复覆盖问题 ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_6-01 微服务网关介绍和使用场景
笔记 第六章 微服务网关zuul开发实战 1.微服务网关介绍和使用场景 简介:讲解网关的作用和使用场景 (画图) 1)什么是网关 API Gateway,是系 ...
随机推荐
- SQL使用 dateadd添加使天数加x
,Receivedate)), ) --第一个参数 表示增加什么(day ) --第二个参数表示增加多少( int ) --第三个参数表示那个字段 (Receivedate 字段属性) conver ...
- Vue介绍:vue导读1
一.什么是vue 二.如何在页面中使用vue 三.vue的挂载点 四.vue的基础指令 一.什么是vue 1.什么是vue vue.js十一个渐进式javascript框架 渐进式:vue从控制页面中 ...
- C++ 内存泄露和内存越界
内存泄露:分配了内存而没有释放,逐渐耗尽内存资源,导致系统崩溃内存越界: 打个比方 就是你有一个500ml的水瓶,然后你倒在瓶里的水大于500ml 那个多余的就会流出来... 1. 原理分析经常有些新 ...
- jQuery 实现手风琴菜单
main.js $(function(){ var tmp = null, $title = $('.title'), $con = $('.title > ul'); $title.click ...
- one(type,[data],fn) 为每一个匹配元素的特定事件(像click)绑定一个一次性的事件处理函数。
one(type,[data],fn) 概述 为每一个匹配元素的特定事件(像click)绑定一个一次性的事件处理函数. 在每个对象上,这个事件处理函数只会被执行一次.其他规则与bind()函数相同.这 ...
- Debug .NET Framework Source
1.Microsoft Reference Source 在线source http://referencesource.microsoft.com/#System.Data.Linq 可以下载离线s ...
- WM_PAINT(父子窗口间)
WM_PAINT(父子窗口间) 窗口句柄(HWND)都是由操作系统内核管理的,系统内部有一个z-order序列,记录着当前从屏幕底部(假象的从屏幕到眼睛的方向),到屏幕最高层的一个窗口句柄的排序,这个 ...
- 如何优雅地防止MLE(for linux)
赛前最后一天模拟赛又有小伙伴MLE了--这里就讲一下如何较为精确地获取程序运行时间和空间. 资源统计当然是操作系统统计的最精确.所以可以这样写(noilinux实测通过,windows下应该不行): ...
- ssh登陆强制使用密码验证登陆
Linux系统使用ssh进行登陆,可以采用密码登陆和秘钥登陆.采用密码登陆每次需要输入密码进行验证,验证通过则可登陆到环境. 秘钥登陆为在服务器的客户端生成相应的公钥和私钥,公钥用于加密,私钥用于解密 ...
- HDU 3394 Railway —— (点双联通,记录块信息)
这题是比较模板的找点双联通并记录的题目. 题意大概是:一个公园有n个景点,1.所有游客都是绕环旅游的,找出所有不在环内的路的条数:2.如果两个环中有重复的边,那么这些边是冲突的,问冲突的边的总数. 分 ...