webclient 请求期间发生异常_探讨通过Feign配合Hystrix进行调用时异常的处理

原文作者作者:任聪

前言:此文所述处理方式为本人在实践过程中研究分析得出的一种解决方案。

本文不仅希望能为 SC 学习者提供一种如题问题的一种解决方案,并且希望通过本文引出各位 SC 的朋友对如题问题的共同探讨和最佳实践方案的分享。

da54e94a779fc4ae000b0c647a84593d.png



场景及痛点

  • 单个项目是通过 Jersey 来实现 restful 风格的架构
  • 发生异常时异常信息总是提示没有回调方法,不能显示基础服务抛出的异常信息
  • 暂时没有考虑发生异常之后进行回调返回特定内容
  • 业务系统通过 feign 调用基础服务,基础服务是会根据请求抛出各种请求异常的(采用标准http状态码),现在我的想法是如果调用基础服务时发生请求异常,业务系统返回的能够返回基础服务抛出的状态码
  • 当然基础服务抛出的请求异常不能触发 hystrix 的熔断机制

问题分析与解决方案

解决思路

  • 通过网上一些资料的查询,看到很多文章会说 HystrixBadRequestException 不会触发 hystrix 的熔断 --> 但是并没有介绍该异常的实践方案
  • 感觉要解决项目的痛点,切入点应该就在 HystrixBadRequestException 了。于是先看源码,一方面对 Hystrix 加深理解,尝试理解作者设计的初衷与想法,另一方面看看是否能找到其他方案达到较高的实践标准

主要类对象简介

  • interface UserRemoteCall 定义feign的接口其上会有 @FeignClient,FeignClient 定义了自己的 Configuration --> FeignConfiguration
  • class FeignConfiguration 这里是定义了指定 Feign 接口使用的自定义配置,如果不想该配置成为全局配置,不要让该类被自动扫描到
  • class UserErrorDecoder implements ErrorDecoder 该类会处理响应状态码 (![200,300) || !404)

源码分析

Feign 的默认配置在 org.springframework.cloud.netflix.feign.FeignClientsConfiguration类中,如果不自定义Feign.Builder,会优先配置 feign.hystrix.HystrixFeign.Builder extends Feign.Builder,该类会让 Feign 的内部调用受到 Hystrix 的控制

//省略部分代码@Configuration@ConditionalOnClass({ HystrixCommand.class, HystrixFeign.class })protected static class HystrixFeignConfiguration {  @Bean  @Scope("prototype")  @ConditionalOnMissingBean @ConditionalOnProperty(name = "feign.hystrix.enabled
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值