笔记

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 高级篇幅之深入源码的更多相关文章

  1. 小D课堂 - 新版本微服务springcloud+Docker教程_汇总

    小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介 小D课堂 - 新版本微服务springcloud+Docker教程_1_02技术选型 小D课堂 - 新版本微服务s ...

  2. 小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介

    笔记 ============================================= SpringCloud课程笔记.txt 第一章 课程介绍和学习路线 1.微服务架构SpringClou ...

  3. 小D课堂 - 新版本微服务springcloud+Docker教程_3-04 SpringCloud微服务核心组件Eureka介绍和闭源后影响

    笔记 4.SpringCloud微服务核心组件Eureka介绍和闭源后影响     简介:         SpringCloud体系介绍             官方地址:http://projec ...

  4. 小D课堂 - 新版本微服务springcloud+Docker教程_3-01 什么是微服务的注册中心

    笔记 第三章 SpringCloud核心组件注册中心 1.什么是微服务的注册中心     简介:讲解什么是注册中心,常用的注册中心有哪些 (画图)                  理解注册中心:服务 ...

  5. 小D课堂 - 新版本微服务springcloud+Docker教程_2_04微服务下电商项目基础模块设计

    笔记 4.微服务下电商项目基础模块设计     简介:微服务下电商项目基础模块设计 分离几个模块,课程围绕这个基础项目进行学习             小而精的方式学习微服务 1.用户服务       ...

  6. 小D课堂 - 新版本微服务springcloud+Docker教程_2_03常见的微服务框架

    笔记 3.常见的微服务框架     简介:讲解常用的微服务框架 consumer: 调用方         provider: 被调用方         一个接口一般都会充当两个角色(不是同时充当) ...

  7. 小D课堂 - 新版本微服务springcloud+Docker教程_6-06 zuul微服务网关集群搭建

    笔记 6.Zuul微服务网关集群搭建     简介:微服务网关Zull集群搭建 1.nginx+lvs+keepalive      https://www.cnblogs.com/liuyisai/ ...

  8. 小D课堂 - 新版本微服务springcloud+Docker教程_6-03 高级篇幅之zuul常用问题分析

    笔记 3.高级篇幅之Zuul常用问题分析和网关过滤器原理分析 简介:讲解Zuul网关原理和过滤器生命周期,           1.路由名称定义问题         路由映射重复覆盖问题        ...

  9. 小D课堂 - 新版本微服务springcloud+Docker教程_6-01 微服务网关介绍和使用场景

    笔记 第六章 微服务网关zuul开发实战 1.微服务网关介绍和使用场景     简介:讲解网关的作用和使用场景 (画图)          1)什么是网关         API Gateway,是系 ...

随机推荐

  1. git回退到历史版本

    问题描述 在开发的过程中,想要修改一个参数的命名.然后修改各种地方,并且push上码云的远程仓库.然后突然发现还要改很多地方,突然后悔不想改动了.那该怎么办呢? 处理步骤 回退本地的git版本 将本地 ...

  2. kubernetes之健康状态检测

    1.说明 容器探针: kubelet 对容器执行的定期诊断 探针执行方式: LivenessProbe: 判断容器是否存活 running状态, 如果不健康kubelet就会杀掉pod,根据重启策略R ...

  3. bat 提示窗口,带换行

    bat 提示窗口 各种窗口样式 mshta vbscript:msgbox("内容1",1,"标题1")(window.close) mshta vbscrip ...

  4. systemctl可以实现nginx进程挂了之后自动重新启动

    接 2018年7月31日的那篇: vim /lib/systemd/system/nginx.service [Service]Restart=alwaysRestartSec=1Type=forki ...

  5. [JLOI2009]神秘的生物——轮廓线DP

    原题链接 题目大意 \(n\times n\)的带权方阵,选一个权值最大的连通块 Solution 一眼连通性DP,然后就没了 转移很好想的啦,简单讨论一下就行了 有一个坑点,就是不能一个格子都不选, ...

  6. MySQL基准测试和sysbench工具

    参考https://www.cnblogs.com/kismetv/archive/2017/09/30/7615738.html 一.基准测试的作用 sysbench是一个开源的.模块化的.跨平台的 ...

  7. PHP mysqli_get_proto_info() 函数

    定义和用法 mysqli_get_proto_info() 函数返回 MySQL 协议版本. 语法 mysqli_get_proto_info(connection); 实例 返回 MySQL 协议版 ...

  8. php实现浏览器大文件分片上传

    PHP用超级全局变量数组$_FILES来记录文件上传相关信息的. 1.file_uploads=on/off 是否允许通过http方式上传文件 2.max_execution_time=30 允许脚本 ...

  9. Comet OJ - Contest #11 B 背包dp

    Code: #include <bits/stdc++.h> #define N 1005 #define M 2000 #define setIO(s) freopen(s". ...

  10. 【8.27-模拟赛】remove

    题解: 代码: #include<iostream> #include<algorithm> #include<cstdio> #include<cstrin ...