在上面的**中,需要些服務的位址,引數,執行的方法,返回值型別等四個方面的內容。而這種在**中編寫服務位址的方式是一種非常不優雅的做法,並且是比較繁瑣的一種做法。
我們希望這裡呼叫的服務能夠像是呼叫 service 中的方法一樣進行呼叫。所以這裡就可以用到 feign 框架來完成這樣的操作。
feign 英文翻譯為:偽裝,裝作,佯裝等等。
feign 是 netflix 公司開發的宣告式、模板化的 http 客戶端,feign 可以幫助我們更快捷、優雅地呼叫 http api。它可以把 rest 的請求進行隱藏,偽裝成類似 springmvc 的 controller 一樣。不用再自己拼接 url,拼接引數等等操作,一切都可以交給 feign 去做。
1、匯入依賴,在 consumer 中匯入 openfeign 的依賴。
org.springframework.cloud<
/groupid>
spring-cloud-starter-openfeign<
/artifactid>
<
/dependency>
2、在啟動類中加上對 feign 支援的註解 (@enablefeignclients)
@enablefeignclients
//啟動對feign的支援
public
class
}3、編寫 feign 的介面,並加上註解告訴 feign 請求的路徑,引數,呼叫的方法以及返回值型別。
介面:
@feignclient
(value =
"user-service"
)public
inte***ce
userservice")
user selectuserbyid
(@pathvariable
("id"
) string id)
;}
4、編寫乙個 controller 來測試使用上面的介面
@restcontroller
("/feignuser"
)public
class
usercontroller")
public msg selectuserbyid
(@pathvariable
("id"
) string id)
else
return msg;
}}
feign 中本身已經整合了 ribbon 依賴和自動配置,所以我們不需要額外引入 ribbon 的依賴,也不需要再註冊 resttemplate 物件。另外,可以按照上一pain文章中的配置一樣來配置 ribbon
user-service: # 配置服務的負載均衡
ribbon:
nfloadbalancerruleclassname: com.netflix.loadbalancer.randomrule
connecttimeout:
250 # ribbon 的連線超時時間
readtimeout:
1000 # ribbon 的資料讀取超時時間
oktoretryonalloperations:
true # 是否對所有操作都進行重試
maxautoretriesnextserver:
1 # 切換例項的重試次數
maxautoretries:
1 # 對當前例項的重試次數
feign 預設也有對 hystix 的整合。但是預設情況下是關閉的,需要通過如下配置進行開啟:
# 開啟熔斷支援
feign:
hystrix:
enable:
true
並且,feign 中 fallback 配置也有區別。
1、首先需要定義乙個類,實現 userclient 介面,作為 fallback 的處理類。
實現類:
/**
* feign介面的降級處理類
*/public
class
userservicecallback
implements
userservice
}
介面:新增回滾函式註解
@feignclient
(value =
"user-service"
,fallback = userservicecallback.
class
)public
inte***ce
userservice")
user selectuserbyid
(@pathvariable
("id"
) string id)
;}
spring cloud feign 支援對請求和響應進行 gzip 壓縮,以減少通訊過程中的效能損耗。通過下面的引數即可開啟請求與響應的壓縮功能以及對請求的資料型別,以及觸發壓縮的大小下限進行設定:
feign:
compression:
request:
enabled:
true # 開啟請求壓縮
min-request-size:
2048 # 設定觸發壓縮的大小下限
response:
enabled:
true # 開啟響應壓縮
學習SpringCloud之服務呼叫Feign
以下示例均基於springcloud的greenwich.sr1版本,且需要依賴到之前介紹springcloud相關的文章 org.springframework.cloudgroupid spring cloud starter openfeignartifactid dependency org...
SpringCloud系列七 負載均衡 Feign
org.springframework.cloud spring cloud starter feign 3 修改公共工程microservicecloud api 1 引入依賴 org.springframework.cloud spring cloud starter feign 2 建立介面d...
springcloud服務之間的呼叫 feign
需求 訂單裡呼叫使用者服務,在訂單裡查詢出使用者資訊 order service和user service 1.user service正常提供controller介面 根據使用者id查詢使用者資訊 param return apioperation value 根據使用者id查詢使用者資訊 not...