Sentinel服务容错五--Feign整合Sentinel实现容错

前面的[基于Feign实现服务调用](https://editor.csdn.net/md/?articleId=115457702)文章中已经对Feign的作用以及使用方法做了详细介绍,微服务之间通过Feign实现相互调用,但如果其中某个微服务调用失败,会出现堵塞,所以需要进行相应的容错设计。

基础配置

  • pom中添加依赖
<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 ";
            }
        };
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值