SpringCloud微服务入门(八),服务熔断组件Hystrix

目录



正文


Hystrix中文是豪猪的意思。属于保护物种,禁止捕捉。

豪猪是一种浑身长满刺的动物,可以用来保护自己,免受敌人伤害(不知道豪猪碰上平头哥会擦出什么样的火花)。

Hystrix就是SpringCloud的保护套件。它具备服务降级、服务熔断、依赖隔离、监控等功能。是SpringCloud的防雪崩利器。

什么是服务雪崩?

当A应用访问B应用,而B应用又访问C应用。C应用挂掉,导致B应用不知道,一直请求资源,导致B应用资源耗尽,出现故障,而A应用又不知道,一直不断请求,直到A应用也资源耗尽。发生级联故障,就像雪崩一样。

什么是服务降级?

服务降级就是把服务器资源优先给核心服务使用,弱化或者禁用非核心服务。

服务降级场景案例。例如秒杀的时候经常会看到提示网络开小差了,请稍后再来,又或者提示哎哟~挤爆了等等类似情景,其实就是后端对服务做了降级处理。

什么是断路器?

将一个受保护的服务封装在一个可以监控故障断路器对象中,当故障达到一定的阈值,断路器就会断掉客户端对该服务的调用,并返回错误。

红灯停 绿灯行 黄灯亮了等一等

1、本节目标

在Feign中使用Hystrix。笔者之前在devices里面调用了park的服务接口,采用的是Feign方式。现在给这个调用加上Hystrix。

2、开始编码

Feign已经依赖了Hystrix,所以在pom.xml中无需引入依赖,直接使用就可以了。使用前先配置application.properties开启Hystrix

feign.hystrix.enabled=true

接下来在ParkClient的@FeignClient注解中加上Hystrix相关参数。所以代码如下:

package com.javafm.devices.client;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;

@FeignClient(name = "park", fallback = ParkClient.ParkClientFallback.class)
public interface ParkClient {

    @GetMapping("/park-list")
    String parkList();

    @Component
    static class ParkClientFallback implements ParkClient {
        @Override
        // 对应的方法,如果产生服务降级就可以到这里来
        public String parkList() {
            return "哎哟~挤爆了";
        }
    }
}

留意fallback参数,指定的是个class,这个是如果出现服务降级就进入对应的class,然后再掉对应的方法。

3、模拟异常,使服务出现降级

启用eureka-server和devices项目,但是不启动park。然后在devices里面访问park。看看效果是不是跟图片中的一样

可以看到park没有启动。devices调用park接口,没有返回服务不可用,404啥的。 而是进入了我们指定的降级方法,返回了哎哟~挤爆了。

这节对于Hystrix介绍,只是使用了默认配置。更多详细使用以后拿出来单独学习。

本节源代码地址:https://gitee.com/dev-tang/learn-springcloud/tree/sc-06/

本博客采用 知识共享署名-禁止演绎 4.0 国际许可协议 进行许可

本文标题:SpringCloud微服务入门(八),服务熔断组件Hystrix

本文地址:https://jizhong.plus/post/2020/03/study-springcloud-08.html