使用的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介...