為什麼要使用Feign

2021-10-08 21:19:23 字數 2901 閱讀 5232

feign是一種負載均衡的http客戶端, 使用feign呼叫api就像呼叫本地方法一樣,從避免了呼叫目標微服務時,需要不斷的解析/封裝json 資料的繁瑣。feign整合了ribbon。ribbon+eureka是面向微服務程式設計,而feign是面向介面程式設計。

fegin是乙個宣告似的web服務客戶端,它使得編寫web服務客戶端變得更加容易。使用fegin建立乙個介面並對它進行註解。它具有可插拔的註解支援包括feign註解與jax-rs註解,feign還支援可插拔的編碼器與解碼器,spring cloud 增加了對 spring mvc的註解,spring web 預設使用了httpmessageconverters, spring cloud 整合 ribbon 和 eureka 提供的負載均衡的http客戶端 feign。

匯入依賴

org.springframework.cloud

spring-cloud-starter-openfeign

注意:刪除resttemplate:feign已經自動整合了ribbon負載均衡的resttemplate。所以,此處不需要再註冊resttemplate。

在itcast-service-consumer工程中,新增userclient介面:

內容:

@feignclient(value = "service-provider") // 標註該類是乙個feign介面

public inte***ce userclient

介面中的定義方法,完全採用springmvc的註解,feign會根據註解幫我們生成url,並訪問獲取結果

改造原來的呼叫邏輯,呼叫userclient介面:

@controller

public class usercontroller

​}

其中client元件是乙個非常重要的元件,feign最終傳送request請求以及接收response響應,都是由client元件完成的,其中client的實現類,只要有client.default,該類由httpurlconnnection實現網路請求,另外還支援httpclient、okhttp.

feign中本身已經整合了ribbon依賴和自動配置:

因此我們不需要額外引入依賴,也不需要再註冊resttemplate物件。

feign預設也有對hystrix的整合:

注意:預設情況下是關閉的。我們需要通過下面的引數來開啟:(在itcast-service-consumer工程新增配置內容)

feign:

hystrix:

enabled: true # 開啟feign的熔斷功能

但是,feign中的fallback配置不像hystrix中那樣簡單了。

1)首先,我們要定義乙個類userclientfallback,實現剛才編寫的userclient,作為fallback的處理類

}2)然後在userfeignclient中,指定剛才編寫的實現類

@feignclient(value = "service-provider", fallback = userclientfallback.class) // 標註該類是乙個feign介面

public inte***ce userclient

}這裡指定的level級別是full,feign支援4種級別:

3)在feignclient中指定配置類

4)重啟專案,即可看到每次訪問的日誌:

封裝了http呼叫流程,更適合面向介面化的變成習慣

在服務呼叫的場景中,我們經常呼叫基於http協議的服務,而我們經常使用到的框架可能有httpurlconnection、apache httpcomponnets、okhttp3 、netty等等,這些框架在基於自身的專注點提供了自身特性。而從角色劃分上來看,他們的職能是一致的提供http呼叫服務。

hystrix預設的超時時間是1秒,如果超過這個時間尚未響應,將會進入fallback**。而首次請求往往會比較慢(因為spring的懶載入機制,要例項化一些類),這個響應時間可能就大於1秒了

解決方案有三種,以feign為例。

hystrix.command.default.execution.isolation.thread.timeoutinmilliseconds: 5000

該配置是讓hystrix的超時時間改為5秒

hystrix.command.default.execution.timeout.enabled: false

該配置,用於禁用hystrix的超時時間

feign.hystrix.enabled: false

該配置,用於索性禁用feign的hystrix。該做法除非一些特殊場景,不推薦使用。

為什麼要使用blog

有哥們問我,你為什麼使用blog?我總結了一下,覺得有如下幾個原因。1對自己的督促 有了blog,就會經常記得寫點東西 就會經常翻翻網上的新文章,了解一下新技術,不至於迷失在忙碌的生活中 如果把自己的所感所想所學寫出了,自己對自己也會有個概念,不至於迷迷糊糊 還有,畢竟是掛在網上的文字,心中難免擔心...

為什麼要使用XML

xml 代表擴充套件標記語言 extensible markup language 是由 world wide web consortium w 3c 的 xml工作組定義的。這個工作組是這樣描述該語言的 擴充套件標記語言 xml 是 sgml 的子集,其目標是允許普通的 sgml 在web 上以目...

為什麼要使用Nginx?

有人說這些基準測試是不準確的,因為在這樣那樣的環境下,做的比較不一致。我傾向同意基準測試只是告訴了我們其中一部分情況,你能做的是消除偏見 有人見過所有人都同意乙個基準測試是公平的嗎?我是沒見過。我們投資的一些公司把web平台切換到nginx後,可以顯著的解決擴充套件問題。nginx明顯有效的實現了今...