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

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

 

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

持续更新中……

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

image.png

1、Hystrix简介

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

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

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

尽管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、商品服务,注意,我们没有启动库存服务

image.png

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

image.png

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

image.png

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

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


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

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


目录
相关文章
|
28天前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
定时任务在企业应用中至关重要,常用于异步数据处理、自动化运维等场景。在单体应用中,利用Java的`java.util.Timer`或Spring的`@Scheduled`即可轻松实现。然而,进入微服务架构后,任务可能因多节点并发执行而重复。Spring Cloud Alibaba为此发布了Scheduling模块,提供轻量级、高可用的分布式定时任务解决方案,支持防重复执行、分片运行等功能,并可通过`spring-cloud-starter-alibaba-schedulerx`快速集成。用户可选择基于阿里云SchedulerX托管服务或采用本地开源方案(如ShedLock)
|
8天前
|
XML 监控 Java
Spring Cloud全解析:熔断之Hystrix简介
Hystrix 是由 Netflix 开源的延迟和容错库,用于提高分布式系统的弹性。它通过断路器模式、资源隔离、服务降级及限流等机制防止服务雪崩。Hystrix 基于命令模式,通过 `HystrixCommand` 封装对外部依赖的调用逻辑。断路器能在依赖服务故障时快速返回备选响应,避免长时间等待。此外,Hystrix 还提供了监控功能,能够实时监控运行指标和配置变化。依赖管理方面,可通过 `@EnableHystrix` 启用 Hystrix 支持,并配置全局或局部的降级策略。结合 Feign 可实现客户端的服务降级。
67 23
|
22天前
|
人工智能 前端开发 Java
【实操】Spring Cloud Alibaba AI,阿里AI这不得玩一下(含前后端源码)
本文介绍了如何使用 **Spring Cloud Alibaba AI** 构建基于 Spring Boot 和 uni-app 的聊天机器人应用。主要内容包括:Spring Cloud Alibaba AI 的概念与功能,使用前的准备工作(如 JDK 17+、Spring Boot 3.0+ 及通义 API-KEY),详细实操步骤(涵盖前后端开发工具、组件选择、功能分析及关键代码示例)。最终展示了如何成功实现具备基本聊天功能的 AI 应用,帮助读者快速搭建智能聊天系统并探索更多高级功能。
166 2
【实操】Spring Cloud Alibaba AI,阿里AI这不得玩一下(含前后端源码)
|
1月前
|
Java 微服务 Spring
SpringBoot+Vue+Spring Cloud Alibaba 实现大型电商系统【分布式微服务实现】
文章介绍了如何利用Spring Cloud Alibaba快速构建大型电商系统的分布式微服务,包括服务限流降级等主要功能的实现,并通过注解和配置简化了Spring Cloud应用的接入和搭建过程。
SpringBoot+Vue+Spring Cloud Alibaba 实现大型电商系统【分布式微服务实现】
|
2月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
Spring Cloud Alibaba 发布了 Scheduling 任务调度模块 [#3732]提供了一套开源、轻量级、高可用的定时任务解决方案,帮助您快速开发微服务体系下的分布式定时任务。
14604 24
|
30天前
|
Dubbo Java 调度
揭秘!Spring Cloud Alibaba的超级力量——如何轻松驾驭分布式定时任务调度?
【8月更文挑战第20天】在现代微服务架构中,Spring Cloud Alibaba通过集成分布式定时任务调度功能解决了一致性和可靠性挑战。它利用TimerX实现任务的分布式编排与调度,并通过`@SchedulerLock`确保任务不被重复执行。示例代码展示了如何配置定时任务及其分布式锁,以实现每5秒仅由一个节点执行任务,适合构建高可用的微服务系统。
47 0
|
3月前
|
程序员 测试技术 Docker
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day3 全网最全
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day3 全网最全(1)
293 1
|
3月前
|
监控 Java 微服务
Spring Cloud 之 Hystrix
Spring Cloud Hystrix 是一个用于处理分布式系统延迟和容错的库,防止雪崩效应。它作为断路器,当服务故障时通过监控短路,返回备用响应,保持系统弹性。主要功能包括服务降级和熔断:
|
3月前
|
JSON Java Spring
实战SpringCloud响应式微服务系列教程(第八章)构建响应式RESTful服务
实战SpringCloud响应式微服务系列教程(第八章)构建响应式RESTful服务
|
3月前
|
关系型数据库 MySQL Shell
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day2 全网最快最全(下)
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day2 全网最快最全(下)
165 0