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明顯有效的實現了今...