版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第Feign如何實(shí)現(xiàn)第三方的HTTP請(qǐng)求目錄Feign調(diào)用的簡(jiǎn)單實(shí)現(xiàn)1.默認(rèn)模式,不使用配置類,作用于服務(wù)內(nèi)部調(diào)用而非三方請(qǐng)求接口2.自定義配置類3.自定義配置類法24.@FeignClient參數(shù)說明5.自定義配置的簡(jiǎn)單實(shí)現(xiàn)6.Feign的其他請(qǐng)求方式最近,在使用springcloud框架時(shí),發(fā)現(xiàn)feign也能實(shí)現(xiàn)三方請(qǐng)求,而且實(shí)現(xiàn)很簡(jiǎn)單,請(qǐng)求接口的結(jié)構(gòu)很清晰,便果斷學(xué)習(xí)一波。
記錄一下。本次使用的依賴僅有openfeign。
Feign調(diào)用的簡(jiǎn)單實(shí)現(xiàn)
maven依賴
!--openfeign依賴--
dependency
groupIdorg.springframework.cloud/groupId
artifactIdspring-cloud-starter-openfeign/artifactId
/dependency
Feign配置方式
feign有三種使用方式,前一種多是用于無(wú)需配置的微服務(wù)內(nèi)部調(diào)用,后兩者是用于自定義配置的三方調(diào)用或者內(nèi)部微服務(wù)調(diào)用。
1.默認(rèn)模式,不使用配置類,作用于服務(wù)內(nèi)部調(diào)用而非三方請(qǐng)求接口
這種情況下,如果不需要給注冊(cè)中心的微服務(wù)添加額外的參數(shù)配置,那么可以不使用配置類,直接在yml配置打開feign開關(guān)即可。
此時(shí)默認(rèn)使用SpringMVC契約模式。如下代碼中,yml配置為用戶中心的配置文件。
如果一個(gè)業(yè)務(wù)中心想要根據(jù)用戶id查詢用戶信息,那么便可以直接根據(jù)用戶中心的服務(wù)名定位,如UserService類中的@FeignClient配置,注冊(cè)中心會(huì)自動(dòng)根據(jù)服務(wù)名尋址到用戶中心的地址。
#用戶中心的服務(wù)名
spring:
application:
name:user-service
#注冊(cè)中心
eureka:
instance:
prefer-ip-address:true
hostname:localhost
client:
service-url:
defaultZone:http://localhost:8080/eureka/
#feign
feign:
httpclient:
enabled:true
@FeignClient(name="user-service",fallback=UserServiceHystrix.class)
publicinterfaceUserService{
@GetMapping("/user/getUserById")
ResultgetUserById(@RequestParam("id")Stringid);
}
2.自定義配置類
自定義配置類時(shí),直接在feign的配置類上加@Configuration注解,該注解的方式是全局的,對(duì)于所有由@FeignClient注解的調(diào)用類都生效。
這樣的好處在于,調(diào)用項(xiàng)目注冊(cè)中心的其他服務(wù)時(shí)不用頻繁的手動(dòng)去加載配置類。該配置類也會(huì)被加載到springcloudfeign的服務(wù)調(diào)用中。
不過,比較致命的是,調(diào)用外部API時(shí)有可能會(huì)和微服務(wù)調(diào)用之間產(chǎn)生沖突。
Feign契約不支持SpringMVC契約,在feign契約下使用springMVC注解時(shí),spring注解的部分功能會(huì)失效,甚至導(dǎo)致創(chuàng)建bean失敗等。
(大部分java.lang.IllegalStateException:MethodgetAllUrlnotannotatedwithHTTPmethodtype(ex.GET,POST)異常都是由于契約問題造成的。)
3.自定義配置類法2
自定義配置類時(shí),另一種則是不使用注解對(duì)配置類加以標(biāo)識(shí),而是在@FeignClient的注解中添加配置參數(shù),在需要調(diào)用外部API接口的feign調(diào)用類里手動(dòng)加載該配置,加載方式如后文中ApiService服務(wù)所示。
使用這種方式能將項(xiàng)目同注冊(cè)中心的服務(wù)與外部API區(qū)分開來(lái)。
但是需要每一個(gè)feign類去手動(dòng)加載該配置。@FeignClient參數(shù)會(huì)在下文中講到。
4.@FeignClient參數(shù)說明
@FeignClient用來(lái)修飾類、接口類、注解類等。它的所有參數(shù)如下:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public@interfaceFeignClient{
@AliasFor("name")
Stringvalue()default"";
/**@deprecated*/
@Deprecated
StringserviceId()default"";
StringcontextId()default"";
@AliasFor("value")
Stringname()default"";
Stringqualifier()default"";
Stringurl()default"";
booleandecode404()defaultfalse;
Class[]configuration()default{};
Classfallback()defaultvoid.class;
ClassfallbackFactory()defaultvoid.class;
Stringpath()default"";
booleanprimary()defaulttrue;
}
value:服務(wù)名,訪問第三方接口時(shí)可以隨便命名。支持從配置文件中獲取配置。name:請(qǐng)求的服務(wù)名(用于微服務(wù)時(shí),請(qǐng)求其他服務(wù)名的名稱)。url:第三方請(qǐng)求地址,支持從配置文件中獲取配置。fallback:失敗時(shí)請(qǐng)求的回調(diào)類,熔斷處理。configuration:手動(dòng)加載feign配置類。
5.自定義配置的簡(jiǎn)單實(shí)現(xiàn)
A.Feign配置類
//增加該配置時(shí),該配置類就變成全局配置類
//@Configuration
publicclassFeignConfigimplementsRequestInterceptor{
@Autowired
privateObjectFactoryHttpMessageConvertersmessageConverters;
@Bean
publicContractfeignContract(){
//feign契約@RequestLine
returnnewContract.Default();
//springMVC契約@GetMapping@PostMapping等
//returnnewSpringMvcContract();
//記錄請(qǐng)求和響應(yīng)的頭文件,正文和元數(shù)據(jù)的日志,需要在配置文件指出需要打印日志的類
@Bean
Logger.LevelfeignLoggerLevel(){
returnLogger.Level.FULL;
//連接超時(shí)時(shí)間說明:連接超時(shí)時(shí)間,單位分鐘,讀取超時(shí)時(shí)間,單位秒,重定向?yàn)槭?/p>
@Bean
publicOptionsoptions(){
returnnewOptions(10,TimeUnit.MINUTES,60,TimeUnit.SECONDS,true);
//編碼方式
@Bean
publicEncoderfeignFormEncoder(){
returnnewSpringFormEncoder(newSpringEncoder(messageConverters));
//(全局設(shè)置)設(shè)置請(qǐng)求頭等業(yè)務(wù)需要參數(shù)。
@Override
publicvoidapply(RequestTemplatetemplate){
}
B.配置文件
使用yml文件配置。Feign默認(rèn)使用URLConnection發(fā)送HTTP請(qǐng)求??梢酝ㄟ^配置文件修改他的http發(fā)送方式如:httpclient、okhttp等??梢愿鶕?jù)自己的需求進(jìn)行修改。
server:
port:8080
#設(shè)置feign請(qǐng)求方式
feign:
httpclient:
enabled:true
#打開debug請(qǐng)求日志可以使用的參數(shù)有infowarnerrordebug等
logging:
level:
com.example.feign.feign.ApiService:debug
#第三方請(qǐng)求地址
url:https://api.apiopen.top
C.正式使用,feign無(wú)參數(shù)GET方式請(qǐng)求三方接口
該部分的測(cè)試接口都是基于開源社區(qū)的測(cè)試接口。使用很久了,再次感謝一下開源社區(qū)大佬們的幸苦付出?,F(xiàn)在有好多接口都用不了。希望大家不要惡意刷接口。
請(qǐng)求方式:GET
請(qǐng)求地址:https://api.apiopen.top/getSingleJoke
方法上使用的注解是feign契約(Contract)RequestLine。要使用Spring契約GetMapping等注解時(shí),需要在FeignConfig中配置即可。
ApiService類代碼如下:
@FeignClient(value="api-service",url="${api.url}"
,fallback=ApiServiceHystrix.class,configuration=FeignConfig.class)
publicinterfaceApiService{
*平臺(tái)接口預(yù)覽方法名可以隨便取
@RequestLine("GET/getAllUrl")
ListStringgetAllUrl();
}
ApiServiceHystrix類代碼:
publicclassApiServiceHystriximplementsApiService{
@Override
publicListStringgetAllUrl(){
//設(shè)置調(diào)用失敗時(shí)的降級(jí)處理
returnnull;
}
調(diào)用寫好的接口,查看參數(shù):
調(diào)用成功!Feign的基礎(chǔ)調(diào)用很簡(jiǎn)單,如果需要調(diào)用多個(gè)相同地址的第三方請(qǐng)求,只需要新增方法即可,無(wú)需再增加額外的配置。
但僅僅用于單次調(diào)用時(shí),feign比起其他HTTP請(qǐng)求方式又稍顯麻煩,不過勝在簡(jiǎn)潔明了。
6.Feign的其他請(qǐng)求方式
Query參數(shù)
請(qǐng)求方式:POST
請(qǐng)求地址:https://api.apiopen.top/getImages
現(xiàn)在嘗試用feign來(lái)進(jìn)行Query請(qǐng)求。請(qǐng)求成功后,用于接收數(shù)據(jù)的對(duì)象可以是一個(gè)Java對(duì)象類,也可以是JSONObject對(duì)象。當(dāng)返回內(nèi)容結(jié)構(gòu)穩(wěn)定時(shí)(成功失敗所返回的數(shù)據(jù)格式相同時(shí)),Java對(duì)象才能準(zhǔn)確接收到信息。
創(chuàng)建一個(gè)結(jié)果類:
@Data
publicclassApiResultimplementsSerializable{
privatestaticfinallongserialVersionUID=1L;
privateIntegercode;
privateStringmessage;
privateListresult;
}
ApiService類中增加對(duì)應(yīng)方法:
@RequestLine("POST/getImagespage={page}count={count}")
ApiResultgetImages(@Param("page")Stringpage,@Param("count")Stringcount);
請(qǐng)求結(jié)果:
POST表單
post表單請(qǐng)求發(fā)送時(shí),請(qǐng)求參數(shù)要為Map類型的鍵值對(duì)。示例代碼:
@RequestLine("POST/deleteFeedback")
ApiResultdeleteFeedback(@RequestBodyMapStrin
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 機(jī)房環(huán)境管控運(yùn)維管理制度
- 安徽合肥市瑤海區(qū)2025-2026學(xué)年第一學(xué)期九年級(jí)期末考試道德與法治試題(含答案)
- 2025年華南農(nóng)業(yè)大學(xué)珠江學(xué)院馬克思主義基本原理概論期末考試模擬題附答案解析
- 命題符號(hào)講解課件
- 2024年齊齊哈爾市職工大學(xué)馬克思主義基本原理概論期末考試題及答案解析(必刷)
- 2024年齊魯醫(yī)藥學(xué)院馬克思主義基本原理概論期末考試題含答案解析(必刷)
- 2025年連城縣幼兒園教師招教考試備考題庫(kù)帶答案解析
- 2024年甘肅衛(wèi)生職業(yè)學(xué)院馬克思主義基本原理概論期末考試題含答案解析(奪冠)
- 2025年巴里坤縣幼兒園教師招教考試備考題庫(kù)附答案解析(必刷)
- 2024年海晏縣招教考試備考題庫(kù)附答案解析
- 四川省攀枝花市2025-2026學(xué)年八年級(jí)上學(xué)期期末數(shù)學(xué)檢測(cè)(含答案)
- 勞動(dòng)人事法律培訓(xùn)課件
- 2026中國(guó)電信四川公用信息產(chǎn)業(yè)有限責(zé)任公司社會(huì)成熟人才招聘?jìng)淇碱}庫(kù)參考答案詳解
- 清真生產(chǎn)過程管控制度
- 途虎養(yǎng)車安全培訓(xùn)課件
- 2025-2026學(xué)年人教版(新教材)小學(xué)數(shù)學(xué)二年級(jí)下冊(cè)(全冊(cè))教學(xué)設(shè)計(jì)(附教材目錄P161)
- 刷單協(xié)議書合同范本
- 內(nèi)科學(xué)總論小兒遺傳代謝病課件
- 2026小紅書平臺(tái)營(yíng)銷通案
- GB/T 26332.3-2015光學(xué)和光子學(xué)光學(xué)薄膜第3部分:環(huán)境適應(yīng)性
- GB/T 17626.4-2008電磁兼容試驗(yàn)和測(cè)量技術(shù)電快速瞬變脈沖群抗擾度試驗(yàn)
評(píng)論
0/150
提交評(píng)論