服務呼叫Feign入門

2021-10-22 05:58:34 字數 3683 閱讀 8732

使用的resttemplate實現rest api呼叫,**大致如下:

public product order()

由**可知,我們是使用拼接字串的方式構造url的,該url只有乙個引數。但是,在現實中,url中往往含有多個引數。這時候我們如果還用這種方式構造url,那麼就會非常痛苦。那應該如何解決?我們帶著這樣的問題了解feign。

feign是netflix開發的宣告式,模板化的http客戶端,其靈感來自retrofit,jaxrs-2.0以及websocket.

feign可幫助我們更加便捷,優雅的呼叫http api。 在springcloud中,使用feign非常簡單——建立乙個介面,並在介面上新增一些註解,**就完

成了。feign支援多種註解,例如feign自帶的註解或者jax-rs註解等。

springcloud對feign進行了增強,使feign支援了springmvc註解,並整合了ribbon和eureka,

從而讓feign的使用更加方便。

在服務消費者 shop_service_order 新增fegin依賴

org.springframework.cloud

spring-cloud-starter-openfeign

@enablefeignclients

public static void main(string args) }

通過@enablefeignclients註解開啟spring cloud feign的支援功能

建立乙個feign介面,此介面是在feign中呼叫微服務的核心介面

在服務消費者 shop_service_order 新增乙個 productfeginclient 介面

//指定需要呼叫的微服務名稱

@feignclient(name="shop-service-product")

public inte***ce productfeginclient

定義各引數繫結時,@pathvariable、@requestparam、@requestheader等可以指定引數屬性,在feign中繫結引數必須通過value屬性來指明具體的引數名,不然會丟擲異常@feignclient:註解通過name指定需要呼叫的微服務的名稱,用於建立ribbon的負載均衡器。所以ribbon會把 shop-service-product 解析為註冊中心的服務。

修改 ordercontroller ,新增productfeginclient的自動注入,並在order方法中使用

productfeginclient 完成微服務呼叫

@restcontroller 

public class ordercontroller

}

ribbon是乙個基於 http 和 tcp 客戶端 的負載均衡的工具。它可以 在客戶端 配置

ribbonserverlist(服務端列表),使用 httpclient 或 resttemplate 模擬http請求,步驟相當繁瑣。

feign 是在 ribbon的基礎上進行了一次改進,是乙個使用起來更加方便的 http 客戶端。採用介面的

方式, 只需要建立乙個介面,然後在上面新增註解即可 ,將需要呼叫的其他服務的方法定義成抽象方

法即可, 不需要自己構建http請求。然後就像是呼叫自身工程的方法呼叫,而感覺不到是呼叫遠端方

法,使得編寫客戶端變得非常容易

從spring cloud edgware開始,feign支援使用屬性自定義feign。對於乙個指定名稱的feign

client(例如該feign client的名稱為 feignname ),feign支援如下配置項:

feign: 

client:

config:

feignname: ##定義feginclient的名稱

connecttimeout: 5000 # 相當於request.options

readtimeout: 5000 # 相當於request.options

# 配置feign的日誌級別,相當於**配置方式中的logger

loggerlevel: full # feign的錯誤解碼器,相當於**配置方式中的errordecoder

errordecoder: com.example.******errordecoder

# 配置重試,相當於**配置方式中的retryer

retryer: com.example.******retryer

# 配置***,相當於**配置方式中的requestinterceptor

requestinterceptors:

- com.example.foorequestinterceptor

- com.example.barrequestinterceptor

decode404: false

feignname:feginclient的名稱

connecttimeout : 建立鏈結的超時時長

readtimeout : 讀取超時時長

loggerlevel: fegin的日誌級別

errordecoder :feign的錯誤解碼器

retryer : 配置重試

requestinterceptors : 新增請求***

decode404 : 配置熔斷不處理404異常

spring cloud feign 支援對請求和響應進行gzip壓縮,以減少通訊過程中的效能損耗。通過下面的引數

即可開啟請求與響應的壓縮功能:

feign:

compression:

request:

enabled: true # 開啟請求壓縮

response:

enabled: true # 開啟響應壓縮

同時,我們也可以對請求的資料型別,以及觸發壓縮的大小下限進行設定:

feign:

compression:

request:

enabled: true # 開啟請求壓縮

min-request-size: 2048 # 設定觸發壓縮的大小下限

注:上面的資料型別、壓縮大小下限均為預設值。

feign: 

client:

config:

shop-service-product: loggerlevel: full

logging:

level:

cn.itcast.order.fegin.productfeginclient: debug

logging.level.xx : debug : feign日誌只會對日誌級別為debug的做出響應

feign.client.config.shop-service-product.loggerlevel : 配置feign的日誌feign有四種

日誌級別:

none【效能最佳,適用於生產】:不記錄任何日誌(預設值)

basic【適用於生產環境追蹤問題】:僅記錄請求方法、url、響應狀態**以及執行時間

headers:記錄basic級別的基礎上,記錄請求和響應的header。

full【比較適用於開發及測試環境定位問題】:記錄請求和響應的header、body和元資料。

服務呼叫Feign

org.springframework.cloud spring cloud starter openfeign enablefeignclients建立client包 feignclient註解用於指定從哪個服務中呼叫功能 名稱與被呼叫的服務名保持一致。pathvariable註解一定要指定引數名...

SpringCloud 服務呼叫 Feign

這節我們來實現下服務呼叫,之前在ribbon中實現的時候,發現呼叫其他的服務還是需要通過resttemplate來呼叫,現在既然所有的服務都註冊到了springcloud中,那麼我們是否有其他的方式呢。springcloud提供了feign,直接通過服務名稱和對應介面進行呼叫,這樣,就像呼叫專案自己...

宣告式服務呼叫Feign

feign介紹 feign是netflix公司開源的輕量級rest客戶端,使用feign可以非常方便的實現http 客戶端。spring cloud引入.feign並且整合了ribbon實現客戶端負載均衡呼叫。feign 整合測試 1 在客戶端新增依賴,所需依賴如下 2 定義feignclient介...