前文回顾:
Spring Cloud(一)Eureka Server-单体及集群搭建
Spring Cloud(二) 配置Eureka Client
一.Hystrix介绍
在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。
Hystrix是一个库,通过添加延迟容忍和容错逻辑,帮助你控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点、停止级联失败和提供回退选项来实现这一点,所有这些都可以提高系统的整体弹性。
二.Hystrix的设计原则
-
防止任何单个依赖项耗尽所有容器(如Tomcat)用户线程。
-
甩掉包袱,快速失败而不是排队。
-
在任何可行的地方提供回退,以保护用户不受失败的影响。
-
使用隔离技术(如隔离板、泳道和断路器模式)来限制任何一个依赖项的影响。
-
通过近实时的度量、监视和警报来优化发现时间。
-
通过配置的低延迟传播来优化恢复时间。
-
支持对Hystrix的大多数方面的动态属性更改,允许使用低延迟反馈循环进行实时操作修改。
-
避免在整个依赖客户端执行中出现故障,而不仅仅是在网络流量中。
三.代码示例
代码基于上一篇博客开发
1.配置文件
application.properties添加这一条:
feign.hystrix.enabled=true
2.创建回调类
@Service
public class HelloRemoteHystrix implements HelloRemote {
@Override
public String hello(@RequestParam(value = "name") String name) {
return "hello " + name + ",this message send failed";
}
}
3.添加fallback属性
@FeignClient(name= "spring-cloud-producer", fallback = HelloRemoteHystrix.class)
public interface HelloRemote {
@RequestMapping(value = "/hello")
String hello(@RequestParam(value = "name") String name);
}
4.测试
依次启动spring-cloud-eureka、spring-cloud-producer、spring-cloud-consumer三个项目
浏览器中输入:http://localhost:9001/hello/yfy
返回:hello yfy,welcome to Spring Cloud
手动停止spring-cloud-producer服务
浏览器中输入:http://localhost:9001/hello/yfy
返回:hello yfy,this message send failed