调用方法[manageapp]时发生异常_探讨通过Feign配合Hystrix进行调用时异常的处理
生活随笔
收集整理的這篇文章主要介紹了
调用方法[manageapp]时发生异常_探讨通过Feign配合Hystrix进行调用时异常的处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原文作者作者:任聰
前言:此文所述處理方式為本人在實踐過程中研究分析得出的一種解決方案。
本文不僅希望能為 SC 學習者提供一種如題問題的一種解決方案,并且希望通過本文引出各位 SC 的朋友對如題問題的共同探討和最佳實踐方案的分享。
場景及痛點
- 單個項目是通過 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總結
以上是生活随笔為你收集整理的调用方法[manageapp]时发生异常_探讨通过Feign配合Hystrix进行调用时异常的处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: go定时读取mysql_golang+数
- 下一篇: select sqlite 唯一_SQL