1. 程式人生 > >微服務消費端通過feign呼叫微服異常問題

微服務消費端通過feign呼叫微服異常問題

在專案開發中,我們的呼叫方通過Feign呼叫微服時,如果微服出現業務異常(例如空指標,或丟擲自定義的異常)和非業務異常(引數不合法4xx異常)都會進入到呼叫方的全域性異常攔截器,丟擲的code全部轉換成了500,這樣不友好

實際上只有業務異常feign才會轉換成500錯誤且轉成FeignException,空指標不會暴露給呼叫者

記錄一次坑,feign的沒有觸發fallback原因

{
"status": "ERROR",
"code": "500",
"msg": "request method:GET uri:/test\nError creating bean with name 'com.amez.common.api.feign.ICommonApiFeignClient': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalStateException: Incompatible fallback instance. Fallback/fallbackFactory of type class com.amez.common.api.feign.fallback.CommonFeignClientFallbackFactory is not assignable to interface com.amez.common.api.feign.ICommonApiFeignClient for feign client amez-common-service"
}
@FeignClient的fallbackFactory寫成了fallback屬性,在呼叫方開啟feign熔斷
feign:
    hystrix:
        enabled: true
這樣微服暴露的異常只會在控制檯列印,但是進入了fallback返回了預設值,不至於呼叫方執行緒中斷

---

當開啟feign的Hystrix配置,同時在啟動類上新增@EnableCircuitBreaker 開啟服務的熔斷時



熔斷的方法引數要一致,否則會拋異常!

若提供方微服務出現異常,則會走到降低邏輯,而不會進入熔斷!

若提供方微服務正常返回資料,呼叫方出現異常,則會觸發方法的熔斷!

總結:feign中也內建了對hystrix的支援,開啟feign的hystrix是針對呼叫微服務的降級處理

@HystrixCommand註解是針對自身方法的異常,方法級別的熔斷處理!

服務降級:是主邏輯失敗採用備用邏輯的過程,

服務熔斷:因短時間內多次失敗,而被暫時性的忽略,不再使用

相關推薦

服務消費通過feign呼叫微服異常問題

在專案開發中,我們的呼叫方通過Feign呼叫微服時,如果微服出現業務異常(例如空指標,或丟擲自定義的異常)和非業務異常(引數不合法4xx異常)都會進入到呼叫方的全域性異常攔截器,丟擲的code全部轉換成了500,這樣不友好實際上只有業務異常feign才會轉換成500錯誤且轉成

Dubbo剖析-服務消費泛化呼叫

一、前言 前面我們講解基於Spring和基於dubbo api方式搭建一個簡單的分散式系統時候服務消費端是引入了一個sdk的,這個SDK是個二方包,裡面存放了服務提供端提供的所有介面類以及介面使用的入參和出參的pojo類,服務消費端則使用JDK代理對介面進行代理。 泛化介面呼叫方式主要用於服務

Dubbo剖析-服務消費非同步呼叫

一、前言 前面我們講解的無論是正常呼叫還是泛化呼叫也好,都是進行同步呼叫的,也就是服務消費方發起一個遠端呼叫後,呼叫執行緒要被阻塞掛起,直到服務提供方返回。本節來講解下非同步呼叫,非同步呼叫是指服務消費方發起一個遠端呼叫後,不等服務提供方返回結果,呼叫方法就返回了,也就是當前執行緒不會被阻塞,這就允許呼叫方

spring cloud快速入門教程(六)程序間呼叫服務負載均衡(Feign

RestTemplate是不是很簡單粗暴呢?還有更粗暴的,那就是Feign,很多人都用過Dubbo,Feign的用法跟他類似。 我們複用userService那個module去呼叫productService微服務中的getProduct介面,引入Feign的依賴包: &

dubbo組成原理-http服務消費如何呼叫

dubbo協議已經用的很多了,這裡來稍微介紹一下http協議,官方對http協議的說明簡直少的讓人髮指。哈哈 百度大部分都只是講了http服務端的配置 那就先從服務端的配置說起 dubbo需要的jar包這裡就不說明了,網上找些maven的pom就可以 web.xml配置se

netty學習九:(window7上)python客戶通過thrift呼叫java服務

概述 本文簡單介紹使用python編寫客戶端程式碼,通過thrift rpc框架,呼叫java端遠端服務。 在64位window 7上安裝python python對應的下載連結:python下載 本文使用的版本是 python-2.

服務消費泛化調用與異步調用

null 當前 ndt obj 技術分享 tap 參數設置 簡單的 pub 本文借用dubbo.learn的Dubbo API方式來解釋原理。 服務消費端泛化調用 前面我們講解到,基於Spring和基於Dubbo API方式搭建簡單的分布式系統時,服務消費端引入了一個SDK

SpringCloud服務基礎4:Feign

        Spring Cloud Feign是一套基於Netflix Feign實現的宣告式服務呼叫客戶端。它使得編寫Web服務客戶端變得更加簡單。我們只需要通過建立介面並用註解來配置它既可完成對Web服務介面的繫結。它具備可插拔的註解支援,包括Fei

Spring Cloud服務的簡單組成和呼叫過程

學習微服務的過程中,很多東西都會忘,所以就畫了一個微服務的圖,其實之前我也畫過微服務的圖,但是沒有這個詳細,希望能幫到正在開始學習微服務的人吧!       其實微服務很簡單就像你去足療店一樣,你不知道怎麼去,第一次,怎麼辦,你求助你的朋友,你的朋友經常去,所以你的

SpringCloud服務ribbon restTemplate hystrix feign eureka框架搭建

少年我知道你看講解煩,來吧github:https://github.com/singgel/Spring-SkillTree 一、微服務架構 1.1什麼是分散式 不同模組部署在不同伺服器上 作用:分散式解決網站高併發帶來問題   1.2什麼是叢集 多臺伺服器部

Spring Cloud服務解決方案④:Feign的使用

Feign是一個宣告web服務客戶端,這便得編寫web服務客戶端更容易,使用Feign 建立一個介面並對它進行註解,它具有可插拔的註解支援包括Feign註解與JAX-RS註解,Feign還支援可插拔的編碼器與解碼器,Spring Cloud 增加了對 Spring MVC的註解,Spring W

IDEA專案搭建十三——服務消費與生產通訊實現

一、簡介 之前已經完成了EurekaClient的服務生產者和Feign的服務消費者模組的搭建,現在實現統一的通訊約定 (1) 統一Request結構 (2) 統一Response結構 (3) 統一Error通知 二、程式碼 1、建立統一請求物件ServiceRequest<>實際引數就是這個泛型

小程聊服務-自己動手擴充套件分散式呼叫

一、說在前面 微服務是當下最火的詞語,現在很多公司都在推廣微服務,當服務越來越多的時候,我們是否會糾結以下幾個問題: 面對一筆超時的訂單,究竟是哪一步處理時間超長呢? 資料由於併發莫名篡改,到底都誰有重大嫌疑呢? 處理遺漏了一筆訂單,曾經是哪個環節

dubbo-服務消費類圖

dubbo框架原始碼分析之服務消費者 dubbo提供了服務提供者和消費者兩種角色,他倆是相輔相成的。而且對於消費者而言也有複雜的處理邏輯。特別是叢集模式下和特殊場景下如快速失敗,重試啊等等。由於消費

Ceph API服務開發--儲存叢集API呼叫

目標:開發Ceph儲存叢集API呼叫微服務環境:IntelliJ IDEA步驟:librados庫簡介->儲存叢集API呼叫程式編寫->API呼叫測試->Spring Boot微服務改造->執行測試參考:http://docs.ceph.org.cn/

C++客戶通過gSOAP呼叫WebService

webService三要素: SOAP(Simple Object Access Protocol)、WSDL(WebServicesDescriptionLanguage)、UDDI(UniversalDescriptionDiscovery andInte

面向服務前後分離的跨域問題

白名單 可選 域名 目標 自定義 異步 雙工 異步請求 相互 我主要是通過cors解決的,它會在正式通信之前,增加一次 HTTP 查詢請求,稱為"預檢"請求,該請求是 option 方法的,通過該請求來知道服務端是否允許跨域請求。 下面是我解決問題時查看的資料: 一、什

跟我學SpringCloud | 第三篇:服務的提供與Feign呼叫

跟我學SpringCloud | 第三篇:服務的提供與Feign呼叫 上一篇,我們介紹了註冊中心的搭建,包括叢集環境嚇註冊中心的搭建,這篇文章介紹一下如何使用註冊中心,建立一個服務的提供者,使用一個簡單的客戶端去呼叫服務端提供的服務。 本篇文章中需要三個角色,分別是服務的提供者,服務的消費者,還有一個是上一篇

Spring Cloud(三):Web服務客戶Feign

前文介紹了實現客戶端負載均衡的Ribbon,但直接使用Ribbon的API來實現服務間的呼叫相對較為繁瑣,服務間的呼叫能否像本地介面呼叫一樣便捷、透明,更符合程式設計習慣呢?Feign就是用來幹這事的。 Feign Feign是一個宣告式的Web服務客戶端,讓服務之間的呼叫變得非常簡單——定義帶@FeignC

構建服務架構Spring Cloud:服務消費Feign

進行 string oca 成對 rest server 之前 int netflix Spring Cloud Feign Spring Cloud Feign是一套基於Netflix Feign實現的聲明式服務調用客戶端。它使得編寫Web服務客戶端變得更加簡單。我們只需