文章目录
上一期教程讲解了 Sentinel 的限流规则: Sentinel限流规则,这一期主要讲述 Sentinel 的 隔离、降级和授权规则
虽然限流可以尽量避免因高并发而引起的服务故障,但服务还会因为其它原因而故障。而要将这些故障控制在一定范围,避免雪崩,就要靠线程隔离(舱壁模式)和熔断降级手段了
不管是线程隔离还是熔断降级,都是对客户端(调用方) 的保护
Feign整合Sentinel
在 SpringCloud 中,微服务调用一般都是通过 Feign 来实现的,因此做客户端保护必须整合Feign和Sentinel
Feign 的使用在之前的教程中有详细讲解过:Eureka结合Feign
实现的步骤如下:
1.在调用方的 application.yml 文件中,开启 Feign 对 Sentinel 的支持
feign:
sentinel:
enabled: true # 开启feign对sentinel的支持
2.为 FeignClient 编写失败后的降级逻辑
这里有两种方式:
① FallbackClass
,这种方式无法对远程调用的异常做处理
② FallbackFactory
,这种方式可以对远程调用的异常做处理
这里我们选择 FallbackFactory
定义一个类 UserClientFallbackFactory
(名字可以任意),然后实现接口 FallbackFactory<UserClient>
,这里泛型要和对应的 Feign 客户端对应
@Component
public class UserClientFallbackFactory implements FallbackFactory<UserClient> {
@Override
public UserClient create(Throwable cause) {
return new UserClient() {
@Override
public String user() {
cause.printStackTrace();
// 异常时返回空值
return "";
}
};
}
}
3.在 Feign 客户端的 @FeignClient
注解中,添加属性 fallbackFactory
,值就是刚才定义的类的 class 对象
@FeignClient(name = "service2", url = "http://127.0.0.1:8082", fallbackFactory = UserClientFallbackFactory.class)
这里为了方便,就直接定义了对应服务的 url,如果结合了注册中心,这里只需要填写对应的服务名即可
4.启动测试
访问对应服务端点后,进入 Sentinel 控制台,可以看到如下界面,表示 Feign 已经成功整合了 Sentinel
然后添加限流规则,将 QPS 设为 1,测试异常情况
然