Spring Cloud Alibaba - Sentinel入门案例(七)(补充使用(二) Feign整合Sentinel / 实现FallbackFactory容错获取异常 )
回溯
前面的博文已经讲述了关于Sentinel的简单使用,但是还是有一些需要功能点没有覆盖,这边做一些简单的补充。
Feign整合Sentinel
环境准备
需要启动好 Sentinel 控制台,以及监控一个消费者。
若对这一步有疑虑,请参考SpringCloud Alibaba - Sentinel入门案例(一)。
开始整合
在配置文件中添加以下配置。
feign:
sentinel:
enabled: true
创建容错类:此类要求必须实现被容错的接口,并为每个方法实现容错方案。
/**
* 这是一个容错类
* 它要求实现Feign所在接口,并实现里面的方法
* 当feign调用出现问题的时候,就会进入到当前类中同名方法中
*/
@Service
@Slf4j
public class NacosSCZServiceFallBack implements NacosSCZService {
@Override
public String testFunction(String message) {
log.error("{}", "进入到feign容错");
return null;
}
}
若对接口有疑虑,请参考:SpringCloud Alibaba - fegin入门案例(注意事项)
对于接口,我们需要指定容错类:
/**
* value用于指定调用nacos下哪个微服务
* fallback 指定当调用出现问题之后,要进入到哪个类中的同名方法之下执行备用逻辑
*/
@FeignClient(value = "test-scz",fallback = NacosSCZServiceFallBack.class)
public interface NacosSCZService {
@GetMapping(value = "/scz/testFunction")
String testFunction(@RequestParam(value = "message") String message);
}
接着,我们进行测试,首先添加一个简单的流控规则,然后观察流控生效的时候有没有执行我们自定义的容错方法。
结论:流控生效后,会进入自定义方法。
问题:当发生了容错后,若有错误信息,怎么补货查看。
FallbackFactory容错获取异常
环境准备与上面一致。
Feign 提供了一种方式,可以捕获容错的时候抓取它的错误信息。
新增一个容错类,但是此类不需要继承容错接口
/**
* 这是容错类,他要求我们要是实现一个FallbackFactory<要为哪个接口产生容错类>
*/
@Component
@Slf4j
public class NacosSCZServiceFallbackFactory implements FallbackFactory<NacosSCZService> {
@Override
public NacosSCZService create(Throwable throwable) {
log.error("{}","进入到容错信息的error打印");
log.error("{}",throwable);
return message -> {
log.error("{}","进入到容错信息的打印");
return null;
};
}
}
修改容接口配置。
/**
* value用于指定调用nacos下哪个微服务
* fallbackFactory 指定当调用出现问题之后,要进入到哪个类中的同名方法之下执行备用逻辑
*/
@FeignClient(value = "test-scz",fallbackFactory = NacosSCZServiceFallbackFactory.class)
public interface NacosSCZService {
@GetMapping(value = "/scz/testFunction")
String testFunction(@RequestParam(value = "message") String message);
}
测试结果:
结论:流控生效后,会进入自定义方法。
注意事项:
- fallback 和 fallbackFactory 只能使用其中一种方式。
- @SentinelResource 不可添加在容错接口上