SpringCloud微服务之Hystrix熔断器组件(三)

发布时间:2024-11-03 08:01

文章目录

  • 1为什么要使用熔断器
  • 2什么是Hystrix
  • 3Hystrix组件代码实战应用
    • 3.1shop商城熔断器实战
    • 3.2shop商城熔断器测试

本章课程学习目标:
(1)Spring Cloud微服务架构
(2)Hystrix熔断器组件的学习
  (3)SHOP商城微服务Hystrix熔断器组件代码实战

1为什么要使用熔断器

        在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。
        如果下图所示:A作为服务提供者,B为A的服务消费者,C和D是B的服务消者A不可用引起了B的不可用,并将不可用像滚雪球一样放大到C和D时,雪崩效应就形成了。
SpringCloud微服务之Hystrix熔断器组件(三)_第1张图片
如何避免产生这种雪崩效应呢?我们可以使用Hystrix来实现熔断器。

2什么是Hystrix

        Hystrix [hɪst’rɪks]的中文含义是豪猪, 因其背上长满了刺,而拥有自我保护能力。
Hystrix 能使你的系统在出现依赖服务失效的时候,通过隔离系统所依赖的服务,防止服务级联失败,同时提供失败回退机制,更优雅地应对失效,并使你的系统能更快地从异常中恢复。

        了解熔断器模式请看下图:
SpringCloud微服务之Hystrix熔断器组件(三)_第2张图片

3Hystrix组件代码实战应用

如果代码看的不是很清楚,请从spring Cloud微服务实战项目(一)开始看SpringCloud之服务发现组件 Eureka与Feign组件(二)

3.1shop商城熔断器实战

Feign 本身支持Hystrix,不需要额外引入依赖。

  • (1) 修改shop_order模块的application.yml ,开启hystrix
    feign:
    hystrix:
    enabled: true
  • (2)在com.springcloud.order.client包下创建impl包,包下创建熔断实现类,实现自接口ProductClient
1.	package com.springcloud.order.client;  
2.	import entity.Result;  
3.	import entity.StatusCode;  
4.	import org.springframework.stereotype.Component;  
5.	import java.util.Map;  
6.	@Component  
7.	public class ProductClientImpl implements ProductClient {  
8.	  
9.	    @Override  
10.	    public Result findSearch(Map searchMap) {  
11.	        return new Result(false, StatusCode.ERROR,"抢购太火爆了--排队中");  
12.	    }  
13.	}  

  • (3)修改ProductClient的注解
@FeignClient(value = "shop-product",fallback = ProductClientImpl.class)
  • (4)测试运行
    重新启动商品和订单微服务,测试看熔断器是否运行。
    测试:只要商品微服务挂了,或者有错误则,服务接口走熔断器。
    应用场景:双11下单人数太多,商品微服务承载压力有限,万一人数超多服务假死状态则调用熔断器业务处理,商品太火爆排队中。

3.2shop商城熔断器测试

(1)启动shop_eureka注册中心微服务

(2)启动shop_product商品微服务

(3)启动shop_order订单微服务

(4)正常测试情况:商品微服务可用
SpringCloud微服务之Hystrix熔断器组件(三)_第3张图片
(5)停止商品微服务,模拟商品微服务宕机:则创建订单服务继续可以走熔断器逻辑。
SpringCloud微服务之Hystrix熔断器组件(三)_第4张图片

4个人说明
经验是由一点一点积累的,思维也是由一天一天训练出来的。

        谢谢大家的阅读,原创不易,如果你认为文章对你有所帮助,就点个赞感谢大家支持,你的点赞是我持续写作的动力。

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号