前面的[基于Feign实现服务调用](https://editor.csdn.net/md/?articleId=115457702)文章中已经对Feign的作用以及使用方法做了详细介绍,微服务之间通过Feign实现相互调用,但如果其中某个微服务调用失败,会出现堵塞,所以需要进行相应的容错设计。
基础配置
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
- 在配置文件中开启Feign对Sentinel的支持
#开启 feign 对 sentinel 的支持
feign:
sentinel:
enabled: true
方案一:直接继承被容错的接口,并为每个方法实现容错方案
@FeignClient(value = "sentinel-order-service",
fallback = OrderServiceFallBack.class
)
public interface OrderFeignReqService{
@RequestMapping(value = "/getOrderInfo")
Result getOrderInfo(@RequestParam("orderId") String orderId);
}
@Component
public class OrderServiceFallBack implements OrderFeignReqService{
@Override
public Result getOrderInfo(String orderId) {
return Result.getFailResult("OrderServiceFallBack orderId:" + orderId);
}
}
方案二:实现FallbackFactory接口
@FeignClient(value = "sentinel-order-service",
fallbackFactory = OrderFeignReqServiceFallBackFactory.class
)
public interface OrderFeignReqService{
@RequestMapping(value = "/getOrderInfo")
Result getOrderInfo(@RequestParam("orderId") String orderId);
}
@Component
public class OrderFeignReqServiceFallBackFactory implements FallbackFactory<OrderFeignReqService> {
@Override
public OrderFeignReqService create(Throwable throwable) {
return new OrderFeignReqService() {
@Override
public String getOrderInfo(String orderId) {
throwable.printStackTrace();
return "OrderFeignReqServiceFallBackFactory ";
}
};
}
}