版權(quán)聲明:本文為CSDN博主「markix」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。 原文鏈接: https://blog.csdn.net/qq_31772441/article/details/102531862劃重點(diǎn):文中提到的 Spring Cloud OpenFeign 和 OpenFeign 不是同一個(gè)東西?。?! 關(guān)于區(qū)別:簡單來講 Spring Cloud OpenFeign 是基于 OpenFeign 進(jìn)行包裝,集成了 SpringMVC的注解等方便SpringBoot項(xiàng)目開發(fā)的一個(gè)組件。 OpenFeign github地址、文檔 Spring Cloud OpenFeign github地址、官方主頁 、官方文檔 近期需要通過http調(diào)用一個(gè)url地址可能會(huì)發(fā)生變化的第三方api接口,由于之前使用過OpenFeign,自然想到用Feign來實(shí)現(xiàn),而項(xiàng)目又是SpringCloud項(xiàng)目,再自然的想到了使用 Spring Cloud OpenFeign來實(shí)現(xiàn)。 簡單概括就是:使用Spring Cloud OpenFeign實(shí)現(xiàn) 動(dòng)態(tài)url的接口請(qǐng)求 其實(shí)之前就試過OpenFeign實(shí)現(xiàn)動(dòng)態(tài)的url請(qǐng)求,相關(guān)分享在 跳轉(zhuǎn)鏈接。 具體實(shí)現(xiàn)就是在接口方法加上 URI參數(shù),該URI參數(shù)會(huì)動(dòng)態(tài)替換掉原有的url。 而在Spring Cloud OpenFeign中,實(shí)現(xiàn)思路基本等同于OpenFeign,不過由于Spring Cloud OpenFeign集成了眾多組件(ribbon、hystrix),所以相關(guān)配置還是有很多不同。 示例 maven依賴 客戶端代碼 逐個(gè)解析下相關(guān)細(xì)節(jié): 接口方法的定義使用了SpringMVC的注解 @GetMapping、@RequestParam,其實(shí)SpringMVC的其他注解在此處都是支持的。(有其他文章提到也支持OpenFeign原有的注解@RequestLine、@Param等,但博主實(shí)測是不支持的,相關(guān)解析類為 feign.Contract,這個(gè)存疑) 在使用方式上,OpenFeign需要手動(dòng)構(gòu)建代理對(duì)象,Spring Cloud OpenFeign 不同于 OpenFeign, Spring Cloud OpenFeign 幫我們自動(dòng)生成了接口的代理對(duì)象(即實(shí)現(xiàn)類),并且注冊到Spring中,我們可以很方便的使用 @Autowired 注入代理對(duì)象然后使用。其默認(rèn)的代理對(duì)象是 LoadBalancerFeignClient。還有一個(gè)代理對(duì)象是 feign.Client.Default。兩者區(qū)別在于: LoadBalancerFeignClient 通過服務(wù)名(下文提到)從Eureka查找相關(guān)的節(jié)點(diǎn)地址url,發(fā)起調(diào)用。 feign.Client.Default 僅是簡單的直接調(diào)用。 @FeignClient(name = "ThirdPartyAPI", url = "http://10.1.2.3:8080") name 屬性是 @FeignClient 注解必要的!不定義時(shí)會(huì)報(bào)錯(cuò),其默認(rèn)指代Eureka上的服務(wù)名。 url 屬性,這是重點(diǎn)了! url屬性指定什么值其實(shí)不重要,因?yàn)樽罱K都會(huì)被方法的URI參數(shù)值替換掉,它在這里另一個(gè)重要的作用,就是將接口的代理對(duì)象變成feign.Client.Default(上文提到默認(rèn)是LoadBalancerFeignClient),這樣就繞過了從Eureka取節(jié)點(diǎn)地址這一步,畢竟第三方的地址不可能注冊到我們的Eureka上。(相關(guān)細(xì)節(jié)可自行debug FeignClientFactoryBean.getTarget()) 總結(jié)一下關(guān)鍵點(diǎn): @FeignClient 注解需要指定其 url 屬性(值不重要)! 接口方法定義增加 URI類型的參數(shù)! 接口方法定義SpringMVC的注解 使用@Autowired 注入代理對(duì)象可直接調(diào)用 end ———————————————— 版權(quán)聲明:本文為CSDN博主「markix」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/qq_31772441/article/details/102531862 |
|