上一篇:Spring Cloud Alibaba学习(五):服务消费者-Feign
下一篇:Spring Cloud Alibaba学习(七):网关
在微服务场景下,如图所示,A是上层服务,B、C是底层服务。若此时,B服务宕机,大量需要B服务的请求发送至A服务,那么由于B服务已经不可用,A服务Servlet中大量的请求线程阻塞,最后导致A服务宕机,由于服务与服务之间的依赖,会导致故障传播,进而造成整个微服务瘫痪,称为“雪崩”
Sentinel是alibaba的开源组件,用于实现故障熔断,防止故障传输,在B服务宕机的情况下,由Fallback进行返回,实现快速失败,释放线程资源。
以上一章的consumer-feign模块为基础
pom.xml
添加sentinel依赖:spring-cloud-starter-alibaba-sentinel
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
application.yml
增加sentinel配置
feign:
sentinel:
enabled: true
fallback方法
创建FallbackServiceImpl实现FeignService
@Component
public class FallBackServiceImpl implements FeignService {
@Override
public String getPort(String who) {
return "调用Provider失败";
}
}
启用熔断器
在@FeignClient中添加fallback参数
@FeignClient(value = "icydate-provider", fallback = FallBackServiceImpl.class)
public interface FeignService {
@GetMapping(value = "/get/{caller}")
String getPort(@PathVariable String caller);
}
目录结构
此时,我们停止之前的Provider项目模拟服务宕机,访问/call/provider