feign呼叫過程注意事項

2021-09-13 16:58:21 字數 2360 閱讀 5810

feign是netflix開發的宣告式、模板化的http客戶端, feign可以幫助我們更快捷、優雅地呼叫http api。

在spring cloud中,使用feign非常簡單——建立乙個介面,並在介面上新增一些註解,**就完成了。feign支援多種註解,例如feign自帶的註解或者jax-rs註解等。

spring cloud對feign進行了增強,使feign支援了spring mvc註解,並整合了ribbon和eureka,從而讓feign的使用更加方便。

spring cloud feign是基於netflix feign實現,整合了spring cloud ribbon和spring cloud hystrix,除了提供這兩者的強大功能外,還提供了一種宣告式的web服務客戶端定義的方式。

spring cloud feign幫助我們定義和實現依賴服務介面的定義。在spring cloud feign的實現下,只需要建立乙個介面並用註解方式配置它,即可完成服務提供方的介面繫結,簡化了在使用spring cloud ribbon時自行封裝服務呼叫客戶端的開發量。

spring cloud feign具備可插拔的註解支援,支援feign註解、jax-rs註解和spring mvc的註解。

import org.springframework.cloud.netflix.feign.feignclient;

import org.springframework.web.bind.annotation.pathvariable;

import org.springframework.web.bind.annotation.requestmethod;

import com.itmuch.cloud.study.user.entity.user;

@feignclient(name = "

microservice-provider-user")

public

inte***ce

userfeignclient

", method =requestmethod.get)

public user findbyid(@pathvariable("id"

) long id);

}

在feign呼叫時候正確**如上,引數id和id是一樣的,那麼我們為什麼還需要加上註解@pathvarible呢,還有就是如果使用requestbody和@requestparam這些,為什麼還需要上呢,feign外掛程式是支援springmvc的註解的,那麼為什麼還需要加上這個呢

這個的從她的原理開始分析

feign是乙個偽客戶端,即它不做任何的請求處理。feign通過處理註解生成request,從而實現簡化http api開發的目的,即開發人員可以使用註解的方式定製request api模板,在傳送http request請求之前,feign通過處理註解的方式替換掉request模板中的引數,這種實現方式顯得更為直接、可理解。

通過包掃瞄注入feignclient的bean,該原始碼在feignclientsregistrar類:

首先在啟動配置上檢查是否有@enablefeignclients註解,如果有該註解,則開啟包掃瞄,掃瞄被@feignclient註解介面。

程式啟動後通過包掃瞄,當類有@feignclient註解,將註解的資訊取出,連同類名一起取出,賦給beandefinitionbuilder,然後根據beandefinitionbuilder得到beandefinition,最後beandefinition式注入到ioc容器中

首先通過@enablefeigncleints註解開啟feigncleint

根據feign的規則實現介面,並加@feigncleint註解

程式啟動後,會進行包掃瞄,掃瞄所有的@ feigncleint的註解的類,並將這些資訊注入到ioc容器中。

當介面的方法被呼叫,通過jdk的**,來生成具體的requestemplate

requestemplate在生成request

request交給client去處理,其中client可以是httpurlconnection、httpclient也可以是okhttp

最後client被封裝到loadbalanceclient類,這個類結合類ribbon做到了負載均衡。

可以看到原始碼是依賴了rabbion和hystrix原始碼,所以openfeign是可以實現負載均衡和服務熔斷的,

服務熔斷的使用方法:就是寫乙個方法類,繼承介面,開啟註解,如果服務出現問提了,就會走實現類的邏輯從而達到服務熔斷

posted @

2019-03-25 13:58

動手的程式設計師 閱讀(

...)

編輯收藏

Feign效能優化注意事項

參考 一 feignclient註解 feignclient註解被 target elementtype.type 修飾,表示feignclient註解的作用目標在介面上 1 2 3 4 5 feignclient name github client url configuration githu...

Feign效能優化注意事項

一 feignclient註解 feignclient註解被 target elementtype.type 修飾,表示feignclient註解的作用目標在介面上 feignclient name github client url configuration githubexampleconfi...

STM32 使用過程注意事項

一 io口 1 使用的時候開啟時鐘,若該io被當做外設的埠需要使能復用時鐘。2 若該埠被當做外部中斷引腳也需要開啟復用時鐘。二 讀操作 1 當讀暫存器付給某個變數時,注意這個變數的型別,一般為unsigned int 32位的,如果型別不對在移位操作的時候將得不到正確的結果。2 這個變數可以定義為v...