当前位置: 首页 > news >正文

【Spring Cloud 微服务】1.Hystrix断路器

前言

Hystrix中文意思是豪猪,大家一想到豪猪,可能就想到浑身的刺,来保护自己。

Hystrix同样也是如此,具有熔断、降级、缓存、监控等多项功能,引用这个组件就是为了在当我们一个依赖包出现异常等时候,不影响其他任务的使用。

我们可能在项目或者实战中听说过Hystrix断路器相关使用,那么我们怎么用?在哪里用,如何用,如何和Fegin等结合起来,这是个问题。

使用背景

降级(fallBack)

当我们调用某个服务,比如调用影院系统的查询服务,如果出现以下场景:

  • 服务超时
  • 服务调用异常
  • 线程池拒绝
  • 断路器打开

1. 引入Hystrix相关依赖

首先,在项目的pom.xml文件中添加Hystrix的依赖:

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

2. 启用Hystrix

在Spring Boot启动类上添加@EnableHystrix注解,以启用Hystrix的功能:

@SpringBootApplication
@EnableHystrix
public class MovieSystemApplication {public static void main(String[] args) {SpringApplication.run(MovieSystemApplication.class, args);}
}

3. 配置Hystrix

application.yml中添加Hystrix的相关配置:

hystrix:command:default:execution:isolation:thread:timeoutInMilliseconds: 5000  # 设置默认超时时间为5秒strategy:maxConcurrentRequests: 10      # 设置默认的最大并发请求数

4. 实现降级逻辑

在需要降级的业务逻辑中使用@HystrixCommand注解,并定义降级方法:

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
@Service
public class MovieService {@HystrixCommand(fallbackMethod = "getDefaultMovie")public Movie findMovieById(String movieId) {// 调用实际的查询服务,可能会抛出异常或超时return movieRepository.findById(movieId).orElseThrow(() -> new RuntimeException("Movie not found"));}// 降级方法,当服务调用失败时调用private Movie getDefaultMovie(String movieId) {// 返回一个默认的电影对象return new Movie("0000","Default Movie","Default Description",0.0);}
}

5. 测试降级功能

编写单元测试,模拟服务调用失败的情况,验证降级逻辑是否正确触发:

@RunWith(SpringRunner.class)
@SpringBootTest
public class MovieServiceTest {@Autowiredprivate MovieService movieService;@Testpublic void testFallbackWhenServiceFails() {Movie movie = movieService.findMovieById("nonexistentId");assertEquals("Default Movie", movie.getTitle());}
}

6. 验证降级行为

可以通过以下方式验证降级行为:

  • 手动抛出异常:在findMovieById方法中手动抛出一个异常,观察是否调用getDefaultMovie方法。
  • 断路器打开:通过多次调用失败的服务,触发断路器打开,验证降级逻辑是否生效。
  • 超时测试:在findMovieById方法中添加一个长时间运行的任务,触发超时,验证降级逻辑是否生效。
    通过以上步骤,我们可以实现一个完整的Hystrix降级机制,确保在服务调用失败时能够返回默认值,提高系统的容错能力和用户体验。

http://www.dtcms.com/a/332914.html

相关文章:

  • 【LeetCode 热题 100】55. 跳跃游戏
  • 数据结构:严格二叉树 (Strict Binary Tree)
  • 【Twincat3】IO的SCAN 不可选中,SCAN中后扫描不到设备
  • RH134 管理存储堆栈知识点
  • 第20章 LINQ 笔记
  • Akka的容错机制,监督策略与熔断器的区别
  • 【时时三省】(C语言基础)共用体类型
  • 深度解析 DDoS 攻击:运作机制与防御体系构建​
  • 金融项目高可用分布式TCC-Transaction(开源框架)
  • 01数据结构-拓扑排序
  • Go语言实战案例:静态资源服务(CSS、JS、图片)
  • 迁移学习的常见研究领域(附有相关资料)
  • Kubernetes(2)pod的管理及优化
  • 数据结构初阶(17)排序算法——非比较排序、排序算法总结
  • LintCode第107题-单词拆分-新版
  • 国产操作系统之openEuler:根深叶茂
  • 力扣习题:基本计算器
  • 通过CANopen 配置闭环驱动器C5-E——易格斯igus
  • platform总线注册流程分析
  • CUDA 编程笔记:使用 CUDA 加速数组总和
  • 102、【OS】【Nuttx】【周边】文档构建渲染:安装 Esbonio 服务器
  • 【JavaEE】多线程 -- 死锁问题
  • linux服务器查看某个服务启动,运行的时间
  • 如何将 iPhone 应用程序传输到新 iPhone?
  • C++ rapidjson库使用示例
  • 【慕伏白】CTFHub 技能树学习笔记 -- Web 前置技能之HTTP协议
  • Vue 侦听器(watch 与 watchEffect)全解析3
  • 【ESP32】ESP32-P4 通过 SDIO 连接 ESP32-C6
  • FCC认证三星XR头显加速全球量产,微美全息AI+AR技术引领智能眼镜硬件创新
  • webgis-maps通用地图框架库(leaflet+mapbox)