我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SpringCloudHystrix服务降级限流策略详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SpringCloudHystrix服务降级限流策略详解

前言

前面说到在我们应对高并发的场景,请求量过于大的情况下给我们服务器的压力很多,造成缓存穿透、击穿、雪崩,那么我们采用布隆过滤器,有兴趣的小伙伴可以去看看上篇文章,关于布隆过滤器的解析。Redis处理高并发之布隆过滤器

我们要从根源上解决问题,比如一个接口在同一时间内被多次请求,如果请求失败了,我们还要继续请求么,一直请求一直失败,一直的在给我们的服务器施加压力,这种情况下肯定是不行,这个时候我们就需要对接口服务提供降级策略,在服务请求达成一定失败率的情况下,就触发降级、熔断策略对服务进行保护,也可以去服务的每分钟请求次数做限制,从而保护我们的服务,给服务端减轻压力,可以更加效率去执行业务逻辑。

Hystrix简介

Hystrix 是一个用于解决分布式服务调用出现延迟、故障,在一个服务出现故障的时候,保护其他服务可以正常使用,避免整个系统出现问题,Hystrix作为开源库,以断路器的角色存在着。

Hystrix的使用

服务降级

服务超时或故障,Hystrix调用降级方法处理,首先构建两个服务,一个system服务,定义2个controller方法,一个是模拟超时的场景,一个模拟调用错误的场景,另外一个system2的服务,去模拟分布式场景下的调system服务的场景。

2F9FB80F-7D80-4685-A718-FD1419ABADC9.png

system服务控制层

@RestController
@RequestMapping("/hystrix")
@DefaultProperties(defaultFallback = "timeOutFallbackMethod")
public class HystrixController {
    @Autowired
    private IHystrixService iHystrixService;
    @GetMapping("/error")
    @HystrixCommand
    public String errorMethod() {
        int i = 10 / 0;
        return iHystrixService.fallBackMethodOk();
    }
    @GetMapping("/timeOut")
    @HystrixCommand(fallbackMethod = "timeOutFallbackMethod", commandProperties = {
            //超过2秒及服务降级
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "2000")
    })
    public String timeOutMethod() throws InterruptedException {
        //线程睡眠3秒
        return iHystrixService.timeOutMethod();
    }
    
    private String timeOutFallbackMethod() {
        return "服务访问失败,降级处理";
    }
}

@DefaultProperties 默认全局降级方法,在单纯只加@HystrixCommand注解的情况下,走默认的defaultFallback方法。

int i = 10 / 0; 接口异常情况下降级

C317DBCC-0E56-438C-A286-5ADF205CAE4A.png

超时降级,服务设置超时时间为2秒,调用线程睡眠3秒,超时调降级服务

AF11A118-43B1-4CAD-B04B-467E6B67B197.png

6DE5C48E-3EF2-46BE-A652-7B23FEFF12D3.png

System2调System降级场景

controller

@RestController
@AllArgsConstructor
@RequestMapping("/provider")
public class HystrixProviderController {
    @Autowired
    private HystrixService hystrixService;
    
    @GetMapping("/executeProviderMethod1")
    public String executeProviderMethod1(){
        int i =5/0;
        String result = hystrixService.errorMethod();
        return result;
    }
}

服务system feign接口,feign添加fallback,实现类是调用的降级方法。

@FeignClient(contextId = "hystrixService", value = "Lxlxxx-system", fallbackFactory = HystrixFallbackFactory.class)
public interface HystrixService {
    
    @GetMapping("/hystrix/error")
    public String errorMethod();
    
    @GetMapping("/hystrix/timeOut")
    public String timeOutMethod();
}

fallback降级方法。

@Component
@Slf4j
public class HystrixFallbackFactory implements FallbackFactory<HystrixService> {
    @Override
    public HystrixService create(Throwable cause) {
        log.error("用户服务调用失败:{}", cause.getMessage());
        return new HystrixService() {
            @Override
            public String errorMethod() {
                return "触发system 服务的降级方法";
            }
            @Override
            public String timeOutMethod() {
                return null;
            }
        };
    }
}

服务熔断

Service类里面的熔断方式,可以配置多个出发服务熔断的属性,从而更好的断路保护服务。

@Service
@Slf4j
public class HystrixServiceImpl implements IHystrixService {
    //服务熔断
    @HystrixCommand(fallbackMethod = "fallback",commandProperties = {
            @HystrixProperty(name = "circuitBreaker.enabled",value = "true"),  //是否开启断路器
            @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "5"),   //请求次数
            @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "10000"),  //时间范围
            @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "60"), //失败率达到多少后跳闸
    })
    @Override
    public String countError(Integer count){
        //模拟报错
        if (count > 0){
            throw new RuntimeException("*****count 必须大于0");
        }
        return Thread.currentThread().getName()+"\t"+"调用成功";
    }
    public String fallback(Integer count){
        return "count 必修大于0    count: " +count;
    }
}

总结

熔断、降级的方式有很多,Spring Cloud Hystrix 可以能更好的集成在分布式微服务的架构体系上,采用注解的方式,更加方便使用,如果还有更好的服务熔断、降级策略欢迎小伙伴分享。

以上就是Spring Cloud Hystrix 服务降级限流策略详解的详细内容,更多关于Spring Cloud Hystrix 服务降级限流的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SpringCloudHystrix服务降级限流策略详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SpringCloudHystrix服务降级限流策略详解

这篇文章主要为大家介绍了SpringCloudHystrix服务降级限流策略详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-01-04

Nginx配置实现高效精准的流量限制策略详解

本文详细介绍了使用Nginx配置流量限制策略的方法,旨在实现高效、精准的流量控制。文章介绍了三个模块:limit_req、limit_conn和request_rate_limiting,并提供了具体配置语法和使用示例。建议在配置时明确流量限制目标,逐步调整参数,设置错误页面并定期审查策略,以优化性能和应对不断变化的流量模式。此外,文章还提供了优化技巧,如使用共享内存区域和缓存。通过这些策略,网站可以有效抵御流量激增和恶意活动,同时提高用户体验。
Nginx配置实现高效精准的流量限制策略详解
2024-04-02

阿里云服务器带宽下降 原因、影响与解决策略

随着互联网的发展,越来越多的企业和个人选择在云端运行服务器,以满足他们对于存储、计算和网络带宽的需求。然而,最近一段时间,很多用户反馈阿里云服务器的带宽出现了下降的情况,这对他们的业务运行和用户使用体验带来了很大的影响。本文将详细分析阿里云服务器带宽下降的原因、影响以及解决策略。原因:1.带宽需求增加:随着互联网
阿里云服务器带宽下降 原因、影响与解决策略
2023-11-03

阿里云服务器IP分发策略详解

阿里云服务器是一款面向企业级应用的高性能云产品,支持多种应用场景。本文将详细介绍阿里云服务器如何进行IP分发,帮助您更好地理解和使用这款产品。在阿里云上购买服务器后,您可能会发现阿里云服务器的IP地址并不是唯一的,而是可以进行分发的。这主要是为了提高服务器的可用性和性能。本文将详细介绍阿里云服务器的IP分发策略。
阿里云服务器IP分发策略详解
2024-01-26

阿里云服务器日志保存策略详解

阿里云服务器日志保存策略是阿里云为保障服务器运行稳定性和安全性而采取的一种重要措施。本文将详细阐述阿里云服务器日志保存策略,并提供实用的解决方案。正文:一、阿里云服务器日志保存策略阿里云服务器日志保存策略的主要目的是确保服务器在出现问题时,能够通过查看日志文件来找到问题的原因。具体来说,阿里云服务器日志保存策略包
阿里云服务器日志保存策略详解
2023-11-01

阿里云ECS服务器限速规则解析与优化策略

随着云计算技术的发展,越来越多的企业和个人开始使用阿里云ECS服务器进行业务部署。然而,由于各种原因,ECS服务器可能会出现限速的情况,这不仅会影响业务的正常运行,还会增加运营成本。因此,了解并掌握阿里云ECS服务器限速规则是非常重要的。本文将详细介绍阿里云ECS服务器限速规则,并提供优化策略,帮助读者更好地使用
阿里云ECS服务器限速规则解析与优化策略
2023-11-12

阿里云服务器的流量限制详解

本文将详细介绍阿里云服务器的流量限制,包括流量类型、流量上限、流量计费方式等内容,帮助用户更好地理解和使用阿里云服务器。在使用阿里云服务器时,了解服务器的流量限制是非常重要的。流量是指在一定时间内通过网络传输的数据量,主要包括带宽流量和数据流量。接下来,我们将深入探讨阿里云服务器的流量限制。首先,我们需要明确的是
阿里云服务器的流量限制详解
2024-01-26

详解GaussDB(for MySQL)服务:复制策略与可用性分析

摘要:本文通过介绍GaussDB(for MySQL)读写路径,分析其可用性。 简介 数据持久性和服务可用性是数据库服务的关键特征。 在实践中,通常认为拥有 3 份数据副本,就足以保证持久性。 但是 3 份副本,对于可用性的要求是不够的。维护 3 份一致的副
详解GaussDB(for MySQL)服务:复制策略与可用性分析
2020-02-17

Puppet 进阶策略:掌握高级技巧,释放服务器管理的无限可能

Puppet 作为服务器配置管理工具,可实现服务器自动化管理与配置,提高管理效率。本文将介绍 Puppet 的高级技巧,助力用户掌握复杂环境的配置管理。
Puppet 进阶策略:掌握高级技巧,释放服务器管理的无限可能
2024-02-12

阿里云服务器登录限制原因、解决方法及应对策略

本文旨在解释阿里云服务器登录限制的原因,提供解决方法,并给出应对策略。阿里云服务器作为企业级云计算服务,为用户提供了高效的计算和存储资源。然而,服务器登录限制是经常发生的问题,这可能会影响到企业的工作效率。因此,了解其原因并掌握相应的解决方法和应对策略至关重要。原因:账号安全问题:如果账号被其他用户误操作,可能会
阿里云服务器登录限制原因、解决方法及应对策略
2023-10-29

阿里云服务器限制性能原因、解决方法与应对策略

本文将详细探讨阿里云服务器限制性能的原因、解决方法与应对策略,帮助用户有效提升服务器性能,保证业务的稳定运行。正文:随着云计算的发展,越来越多的企业和个人选择使用阿里云服务器来运行自己的业务。然而,使用过程中可能会遇到服务器性能限制的问题,严重影响业务运行效率。本文将详细探讨阿里云服务器限制性能的原因、解决方法与
阿里云服务器限制性能原因、解决方法与应对策略
2023-11-05

阿里云服务器对外访问限制理解、应对策略及解决方案

阿里云服务器作为云计算服务的重要组成部分,为企业和开发者提供了高效、安全、可靠的云环境。然而,由于安全考虑,阿里云服务器通常会对服务器的对外访问进行限制。本文将详细解析阿里云服务器对外访问限制的背景、原理及应对策略,帮助您更好地理解并应对服务器的对外访问限制。阿里云服务器对外访问限制:阿里云服务器对外访问限制主要
阿里云服务器对外访问限制理解、应对策略及解决方案
2023-11-15

亚马逊服务器故障的解决方法详细步骤与策略

本文将详细介绍亚马逊服务器故障的解决方法,包括问题的识别、原因分析、故障排除以及预防策略。对于任何经常使用亚马逊服务器的企业和个人来说,这些都是非常重要的知识。一、问题识别亚马逊服务器故障的常见表现包括服务器宕机、响应缓慢、网站崩溃等。如果出现了这些情况,那么就有可能是服务器出现了故障。此外,你也可以通过查看服务
亚马逊服务器故障的解决方法详细步骤与策略
2023-11-05

阿里云服务器CPU满了怎么解决详细解析和应对策略

阿里云服务器作为企业数字化转型的重要工具,承载着企业业务的核心数据和应用。然而,随着业务的快速发展,阿里云服务器的CPU资源可能会出现满载的情况。那么,如何解决阿里云服务器CPU满了的问题呢?本文将详细介绍阿里云服务器CPU满了的解决方法,以及应对策略。正文:一、CPU满了的原因分析业务量过大:如果企业业务量过大
阿里云服务器CPU满了怎么解决详细解析和应对策略
2023-12-11

阿里云服务器支持多少人登录详解及使用策略

阿里云服务器是一款高性能、稳定可靠的云计算产品,为用户提供稳定、安全的计算资源。本文将详细介绍阿里云服务器支持多少人登录,并给出一些使用策略。阿里云服务器支持多少人登录:阿里云服务器提供了多种计费模式,包括按小时计费、按天计费和按年计费。其中,按小时计费方式下的阿里云服务器可以支持同时登录的人数没有上限,用户可以
阿里云服务器支持多少人登录详解及使用策略
2023-12-10

阿里云服务器需不需要关闭?详解服务器的关闭与重启策略

在使用阿里云服务器的过程中,你是否经常遇到需要关闭或重启服务器的情况?关闭服务器会带来一些影响,而重启服务器又可能会导致数据丢失,那么,阿里云服务器到底需不需要关闭?接下来,我们就来详细说明一下。阿里云服务器是阿里云提供的虚拟化计算服务,可以快速部署应用程序,简化运维流程,提高资源利用率。在使用阿里云服务器的过程
阿里云服务器需不需要关闭?详解服务器的关闭与重启策略
2023-12-11

阿里云服务器是否需要付费维护?详解阿里云服务器的运维策略

随着互联网的快速发展,越来越多的企业和个人开始使用阿里云服务器。然而,对于许多用户来说,他们对阿里云服务器的运维策略和成本并不了解。本文将详细介绍阿里云服务器是否需要付费维护以及阿里云服务器的运维策略。阿里云服务器运维策略:阿里云服务器的运维策略主要分为两部分:一是基础运维,二是高级运维。基础运维主要是指阿里云服
阿里云服务器是否需要付费维护?详解阿里云服务器的运维策略
2023-12-17

Java微服务Filter过滤器集成Sentinel实现网关限流过程详解

这篇文章主要介绍了Java微服务Filter过滤器集成Sentinel实现网关限流过程,首先Sentinel规则的存储默认是存储在内存的,应用重启之后规则会丢失。因此我们通过配置中心Nacos保存规则,然后通过定时拉取Nacos数据来获取规则配置,可以做到动态实时的刷新规则
2023-02-10

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录