目录
- SpringCloud微服务入门(零),开篇
- SpringCloud微服务入门(一),Eureka注册中心
- SpringCloud微服务入门(二),Eureka Client
- SpringCloud微服务入门(三),Eureka高可用集群
- SpringCloud微服务入门(四),创建服务
- SpringCloud微服务入门(五),Feign实现服务通信
- SpringCloud微服务入门(六),负载均衡Ribbon
- SpringCloud微服务入门(七),服务网关Zuul
- SpringCloud微服务入门(八),服务熔断组件Hystrix
- SpringCloud微服务入门(九),统一配置中心Config
- SpringCloud微服务入门(十),完结篇,是结束也是开始
- 番外篇 - 安装Docker,运行RabbitMQ镜像)
正文
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/