文章目录
- 引入sentinel依赖
- 配置文件
- 为被容错的接口指定容错类
- 创建容错类
- 修改controller
- 演示
- 扩展
- 为被容错的接口更改容错类
- 创建回退工厂类
- 演示
- 总结
上一篇文章中我们已经对服务容错中间件 Sentinel 持久化的两种模式进行了全面解析,本文我们将对Feign和Sentinel进行有机整合。
引入sentinel依赖
<!--sentinel客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
配置文件
在配置文件中开启 Feign 对 Sentinel 的支持
feign:
sentinel:
enabled: true
为被容错的接口指定容错类
/**
* value用于指定调用nacos下哪个微服务
* fallback用于指定容错类
*/
@FeignClient(value="shop-product",fallback = ProductServiceFallback.class)
public interface ProductService {
//指定调用提供者的哪个方法
@GetMapping(value = "/product/{pid}")
ShopProduct findByPid(@PathVariable("pid") Long pid);
}
创建容错类
容错类要求必须实现被容错的接口,并为每个方法实现容错方案
@Component
public class ProductServiceFallback implements ProductService {
@Override
public ShopProduct findByPid(Long pid) {
ShopProduct product = new ShopProduct();
product.setId(-1L);
return product;
}
}
修改controller
演示
停止shop-product
服务,启动shop-order
服务,访问下单请求,观察容错效果
扩展
如果想在容错类中拿到具体的错误,可以使用下面的方式
为被容错的接口更改容错类
更改被容错接口的容错返回类为回退工厂类
@FeignClient(value="shop-product", fallbackFactory = ProductServiceFallBackFactory.class)
public interface ProductService {
//指定调用提供者的哪个方法
@GetMapping(value = "/product/{pid}")
ShopProduct findByPid(@PathVariable("pid") Long pid);
}
创建回退工厂类
@Component
public class ProductServiceFallBackFactory implements FallbackFactory<ProductService> {
@Override
public ProductService create(Throwable throwable) {
return new ProductService(){
@Override
public ShopProduct findByPid(Long pid) {
throwable.printStackTrace();
ShopProduct product=new ShopProduct();
product.setId(-1L);
return product;
}
};
}
}
演示
注意:Fallback和FallbackFactory只能使用其中一种方式。
总结
到这儿,Feign整合服务容错中间件Sentinel就已经介绍完了。下一篇将为大家带来Gateway——服务网关的相关文章,敬请期待吧!
后续的文章,我们将继续完善我们的微服务系统,集成更多的Alibaba组件。想要了解更多JAVA后端知识,请点击文末名片与我交流吧。留下您的一键三连,让我们在这个寒冷的东西互相温暖吧!