SpringCloud Alibaba实战(9:Hystrix容错保护)

时间:2021-06-29 16:06:48   收藏:0   阅读:0

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

持续更新中……

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

技术图片

1、Hystrix简介

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

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

技术图片

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

技术图片

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

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

2、引入Hystrix

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

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>

feign:
  hystrix:
    enabled: true
@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);
    }
}
/**
 * @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;
    }
}
@FeignClient(value = "stock-service", fallback = StockClientFallback.class)

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

3、测试Hystrix

技术图片

技术图片

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

技术图片

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

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



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

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



参考:

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

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

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!