zoukankan      html  css  js  c++  java
  • SpringCloud Alibaba实战(9:Hystrix容错保护)

    源码地址:https://gitee.com/fighter3/eshop-project.git

    持续更新中……

    在上一节我们已经使用OpenFeign完成了服务间的调用。想一下,假如我们一个服务链路上上下游有十几个服务,每个服务有若干个节点,其中一个节点故障,上游请求打到故障的节点,加入请求一直阻塞,大量堆积的请求可能会把服务打崩,可能导致级联式的失败,甚至整个链路失败,这就是所谓的服务雪崩,严重可能直接导致系统挂掉。为了避免这种可怕的情况,必要的容错保护机制是必需的。

    服务雪崩

    1、Hystrix简介

    Hystrix是Netflix的一个重要组件,提供了断路器、资源隔离与自我修复功能。

    如下是Hystrix作为断路器,阻止级联失败。

    hystrix阻止级联失败

    但是Hystrix1.5.18版本之后进入了维护模式,我们采用的就是这个版本。在SpringCloud Alibaba的体系,有另外一个组件sentinel可以作为替代品,在后面我们会用到。

    Hystrix停止维护

    尽管Hystrix已经停止更新,但是经过多年迭代,目前已经是一个比较成熟的产品,所以仍然有比较广泛的应用。

    Hystrix在SpringCloud体系的使用也非常简单,下面,我们开始吧!

    2、引入Hystrix

    仍然是用我们上节的例子。

    • 采用spring-cloud-starter的方式引入:
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
    
    
    • 在application.yml开启hystrix:
    feign:
      hystrix:
        enabled: true
    
    • 在服务启动类加入@EnableHystrix注解,以使系统支持hystrix的功能。
    @SpringBootApplication
    @MapperScan("cn.fighter3.mapper")
    @EnableDiscoveryClient
    @EnableFeignClients(basePackages = "cn.fighter3.client")
    @EnableHystrix
    public class EshopGoodsApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(EshopGoodsApplication.class, args);
        }
    }
    
    • 编写一个StockClientFallback类,实现StockClientFeign接口,这个类是用来干什么的呢?是用于Feign客户端远程调用失败回调的。
    /**
     * @Author 三分恶
     * @Date 2021/5/29
     * @Description 库存服务回调异常回调类
     */
    @Component
    @Slf4j
    public class StockClientFallback implements StockClientFeign {
    
        public Integer addStock(StockAddDTO stockAddDTO) {
            log.error("库存服务-添加库存不可用!");
            return 0;
        }
    
        public Integer getAccountById(Integer goodsId) {
            log.error("库存服务-获取库存不可用!");
            return 0;
        }
    }
    
    • 在StockClientFeign中添加失败回调配置,原来是@FeignClient(value = "stock-service")
    @FeignClient(value = "stock-service", fallback = StockClientFallback.class)
    

    还有另外一种方式,可以在方法上使用@HystrixCommand(fallbackMethod = "getDefaultUser")来定义服务降级方法。

    3、测试Hystrix

    • 依次启动Nacos-Server、商品服务,注意,我们没有启动库存服务

    服务注册信息

    • 打开 http://localhost:8020/doc.html ,调用一下添加商品接口。想一下,正常情况下,会是什么结果呢?由于库存服务没起,那么连带着商品服务也一定会返回异常,但是加入了hystrix,发现,接口返回成功的结果。

    调用添加商品接口

    看一下我们打的日志,发现回调的方法被调用了。

    错误日志

    好了,Hystrix实现断路器到这就结束了。

    持续更新中,敬请关注……



    "简单的事情重复做,重复的事情认真做,认真的事情有创造性地做!"——

    我是三分恶,一个能文能武的全栈开发,咱们下期见!



    参考:

    【1】:小专栏《SpringCloudAlibaba微服务实战 》

    【2】:Spring Cloud Hystrix:服务容错保护

  • 相关阅读:
    Windows SDK编程(Delphi版) 之 应用基础,楔子
    一个小问题引发的论证思考
    Delphi 组件开发教程指南(7)继续模拟动画显示控件
    用PyInstaller将python转成可执行文件exe笔记
    使用 .Net Memory Profiler 诊断 .NET 应用内存泄漏(方法与实践)
    Microsof Office SharePoint 2007 工作流开发环境搭建
    How to monitor Web server performance by using counter logs in System Monitor in IIS
    LINQ之Order By
    window 性能监视器
    内存泄露检测工具
  • 原文地址:https://www.cnblogs.com/three-fighter/p/14949491.html
Copyright © 2011-2022 走看看