日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

使用Spring Cloud Feign作为HTTP客户端调用远程HTTP服务

發布時間:2025/3/21 javascript 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Spring Cloud Feign作为HTTP客户端调用远程HTTP服务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在spring?Cloud Netflix棧中,各個微服務都是以HTTP接口的形式暴露自身服務的,因此在調用遠程服務時就必須使用HTTP客戶端。我們可以使用JDK原生的URLConnection、Apache的Http Client、Netty的異步HTTP Client, Spring的RestTemplate。但是,用起來最方便、最優雅的還是要屬Feign了。

Feign簡介

Feign是一種聲明式、模板化的HTTP客戶端。在Spring Cloud中使用Feign, 我們可以做到使用HTTP請求遠程服務時能與調用本地方法一樣的編碼體驗,開發者完全感知不到這是遠程方法,更感知不到這是個HTTP請求。比如:

@Autowired private AdvertGropRemoteService service; // 遠程服務public AdvertGroupVO foo(Integer groupId) {return service.findByGroupId(groupId); // 通過HTTP調用遠程服務 }

?

開發者通過service.findByGroupId()就能完成發送HTTP請求和解碼HTTP返回結果并封裝成對象的過程。

Feign的定義

為了讓Feign知道在調用方法時應該向哪個地址發請求以及請求需要帶哪些參數,我們需要定義一個接口:

@FeignClient(name = "ea") // [A] public interface AdvertGroupRemoteService {@RequestMapping(value = "/group/{groupId}", method = RequestMethod.GET) // [B]AdvertGroupVO findByGroupId(@PathVariable("groupId") Integer adGroupId) // [C]@RequestMapping(value = "/group/{groupId}", method = RequestMethod.PUT)void update(@PathVariable("groupId") Integer groupId, @RequestParam("groupName") String groupName)

?

A:?@FeignClient用于通知Feign組件對該接口進行代理(不需要編寫接口實現),使用者可直接通過@Autowired注入。

B:?@RequestMapping表示在調用該方法時需要向/group/{groupId}發送GET請求。

C:?@PathVariable與SpringMVC中對應注解含義相同。

Spring Cloud應用在啟動時,Feign會掃描標有@FeignClient注解的接口,生成代理,并注冊到Spring容器中。生成代理時Feign會為每個接口方法創建一個RequetTemplate對象,該對象封裝了HTTP請求需要的全部信息,請求參數名、請求方法等信息都是在這個過程中確定的,Feign的模板化就體現在這里。

在本例中,我們將Feign與Eureka和Ribbon組合使用,@FeignClient(name = "ea")意為通知Feign在調用該接口方法時要向Eureka中查詢名為ea的服務,從而得到服務URL。

Feign的Encoder、Decoder和ErrorDecoder

Feign將方法簽名中方法參數對象序列化為請求參數放到HTTP請求中的過程,是由編碼器(Encoder)完成的。同理,將HTTP響應數據反序列化為Java對象是由解碼器(Decoder)完成的。

默認情況下,Feign會將標有@RequestParam注解的參數轉換成字符串添加到URL中,將沒有注解的參數通過Jackson轉換成json放到請求體中。注意,如果在@RequetMapping中的method將請求方式指定為POST,那么所有未標注解的參數將會被忽略,例如:

@RequestMapping(value = "/group/{groupId}", method = RequestMethod.GET) void update(@PathVariable("groupId") Integer groupId, @RequestParam("groupName") String groupName, DataObject obj);

?

此時因為聲明的是GET請求沒有請求體,所以obj參數就會被忽略。

在Spring Cloud環境下,Feign的Encoder*只會用來編碼沒有添加注解的參數*。如果你自定義了Encoder, 那么只有在編碼obj參數時才會調用你的Encoder。對于Decoder, 默認會委托給SpringMVC中的MappingJackson2HttpMessageConverter類進行解碼。只有當狀態碼不在200 ~ 300之間時ErrorDecoder才會被調用。ErrorDecoder的作用是可以根據HTTP響應信息返回一個異常,該異常可以在調用Feign接口的地方被捕獲到。我們目前就通過ErrorDecoder來使Feign接口拋出業務異常以供調用者處理。

Feign的HTTP Client

Feign在默認情況下使用的是JDK原生的URLConnection發送HTTP請求,沒有連接池,但是對每個地址會保持一個長連接,即利用HTTP的persistence connection?。我們可以用Apache的HTTP Client替換Feign原始的http client, 從而獲取連接池、超時時間等與性能息息相關的控制能力。Spring Cloud從Brixtion.SR5版本開始支持這種替換,首先在項目中聲明Apache HTTP Client和feign-httpclient依賴:

<!-- 使用Apache HttpClient替換Feign原生httpclient --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId></dependency><dependency><groupId>com.netflix.feign</groupId><artifactId>feign-httpclient</artifactId><version>${feign-httpclient}</version></dependency>

?

然后在application.properties中添加:

feign.httpclient.enabled=true

?

總結

通過Feign, 我們能把HTTP遠程調用對開發者完全透明,得到與調用本地方法一致的編碼體驗。這一點與阿里Dubbo中暴露遠程服務的方式類似,區別在于Dubbo是基于私有二進制協議,而Feign本質上還是個HTTP客戶端。如果是在用Spring Cloud Netflix搭建微服務,那么Feign無疑是最佳選擇。

總結

以上是生活随笔為你收集整理的使用Spring Cloud Feign作为HTTP客户端调用远程HTTP服务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天天操天天操天天操天天操天天操 | 亚洲乱码电影 | 午夜操一操 | 国产午夜精品一区二区三区欧美 | 日韩久久久久 | 亚洲男人天堂影院 | 三级免费网址 | 欧美另类z0z变态 | 成人a网站 | 欧美成人精品一区二区综合免费 | 黄色最新网址 | 曰本毛片 | 中文字幕 国产 | 人人搞人人 | 久久国产三级 | 成人免费国产 | 91麻豆精品国产理伦片在线观看 | 男女涩涩| 伊人久久艹| 91在线无精精品一区二区 | 夜色综合网 | 人禽高h交| 国产精品免费视频一区二区三区 | 成人免费毛片网 | 亚洲 欧美 自拍偷拍 | 自偷自拍亚洲 | 国产精品久久777777毛茸茸 | 亚洲av毛片 | 91av久久| 色哟哟国产精品 | 中文字幕日韩欧美在线 | 亚洲综合首页 | 国产精品熟妇一区二区三区四区 | www色com| 不卡影院一区二区 | 亚洲超丰满肉感bbw 悠悠av | 国产九色在线播放九色 | 日本激情视频在线观看 | 色呦呦在线播放 | 欧美一二三区在线观看 | 免费观看全黄做爰的视频 | 免费a级片视频 | 成年人免费黄色片 | 五月激情四射网 | 欧美精品免费在线 | 精品国产乱码久久久久久蜜臀 | 91久久亚洲 | 激情久久久久久 | 中国人与拘一级毛片 | 老司机久久 | 日韩专区欧美专区 | 毛片免费播放 | 超碰av人人 | 国产无码精品在线播放 | 亚洲手机视频 | 国产综合视频在线观看 | 国产人成一区二区三区影院 | 杨幂一区二区三区免费看视频 | 黄色大网站 | 不卡av在线免费观看 | 免费的黄色网址 | 少妇把腿扒开让我舔18 | 精品少妇v888av | 国产精品3| 国产午夜精品久久久久久久 | 五月激情六月丁香 | 五十路japanese55丰满 | 美女福利视频在线观看 | 操www | 超碰碰碰碰 | 欧美性生活免费视频 | 天堂网一区二区三区 | 在线看不卡av | 久久久久国产视频 | 99国产精品免费视频 | 午夜网站在线观看 | 狠狠干,狠狠操 | 欧美三日本三级少妇三级99观看视频 | 日韩毛毛片 | 亚洲日本综合 | 亚洲精品日韩在线观看 | 99精品无码一区二区 | 五月丁香综合激情六月久久 | 不卡视频国产 | 人妻少妇精品一区二区三区 | 69**夜色精品国产69乱 | 日日操夜夜爱 | 亚洲乱色熟女一区二区 | 奇米第四色首页 | 国产黄色大片在线观看 | 求欧美精品网址 | 久久一区二区三区四区五区 | 国产一二区在线观看 | 在线看国产视频 | 欧美一区二区在线观看视频 | 国产女人18毛片水真多1 | 宗合久久| 国产做爰免费观看视频 | 69av一区二区三区 |