當前位置:網站首頁>@FeignClient使用詳細教程(圖解)
@FeignClient使用詳細教程(圖解)
2022-07-23 14:51:52【傑拉德·皮克·謝】
@FeignClient使用詳細教程圖解
作用
@FeignClient用於創建聲明是API接口,該接口是RESTful風格的。Feign被設計成插拔式的,可注入其他組件和Feign一起使用。最典型的是如果Ribbon可用,Feign會和Ribbon相結合進行負載均衡。
@FeignClient標簽的常用屬性
- 源碼截圖

name(和value相同):指定FeignClient的名稱,如果項目使用了Ribbon,name屬性會作為微服務(某個中心的名字)的名稱,用於服務發現(圖解如下)- url: url一般用於調試,可以手動指定@FeignClient調用的地址(圖解如下)
- decode404()即404是被解碼,還是拋异常。
- configuration()指明FeignClient的配置類,默認的配置類為FeignClientsConfiguration類,在缺省情况下,這個類注入了默認的Decoder、Encoder和Constant等配置的bean。
- fallback()為配置熔斷器的處理類。


- FeignClient的配置類(configuration())
public class FeignUserSupportConfig
{
@Bean
@Primary
@Scope("prototype")
public Encoder multipartFormEncoder() {
return new SpringFormEncoder(new SpringEncoder(new ObjectFactory<HttpMessageConverters>() {
@Override
public HttpMessageConverters getObject() throws BeansException
{
return new HttpMessageConverters(new RestTemplate().getMessageConverters());
}
}));
}
@Bean
public feign.Logger.Level multipartLoggerLevel() {
return feign.Logger.Level.FULL;
}
}
使用流程
- 1.在啟動類增加
@EnableFeignClients
- 2.定義接口
package com.xxx.xxx.client;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.Map;
@Component
/** * value = "user" 中 user 為 調用 user 服務的Id * spring.application.name=user */
@FeignClient(value = "user", configuration = UserSupportConfig.class)
public interface TestClientService {
/** * @param id * @return /user/selectById 為 userController 中的 /user/selectById 方法地址 */
@RequestMapping(value = "/user/selectById", method = RequestMethod.GET, produces = {
MediaType.APPLICATION_JSON_UTF8_VALUE}, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
/** * userId 為參數 必須寫@RequestParam 否則報錯 */
Map upload(@RequestParam("userId") Integer id);
}
- 3.定義熔斷類,發生錯誤時回調:
import java.util.List;
import org.springframework.stereotype.Component;
@Component
public class Hysitx implements TestClientService {
@Override
public List<String> test(String[] names) {
System.out.println("接口調用失敗");
return null;
}
}
- 4.調用
和基本的service調用一致
1.先引入 @Autowired
2.在方法中直接調用
通俗解釋可以把它當成一個spring Bean 可以直接當成一個Service
給@FeignClient 添加Header信息
1.在@RequestMapping中添加
@FeignClient(name="custorm",fallback=Hysitx.class)
public interface IRemoteCallService {
@RequestMapping(value="/user/selectById",method = RequestMethod.POST,
headers = {
"Content-Type=application/json;charset=UTF-8"})
Map test(@RequestParam("userId") int id);
}
2.在方法參數前面添加@RequestHeader注解:
@FeignClient(name="custorm",fallback=Hysitx.class)
public interface IRemoteCallService {
@RequestMapping(value="/user/selectById",method = RequestMethod.POST,
headers = {
"Content-Type=application/json;charset=UTF-8"})
List<String> test(@RequestParam("userId")@RequestHeader("Authorization") int id);
}
3.使用@Header注解
@FeignClient(name="custorm",fallback=Hysitx.class)
public interface IRemoteCallService {
@RequestMapping(value="/user/selectById",method = RequestMethod.POST)
@Headers({
"Content-Type: application/json;charset=UTF-8"})
List<String> test(@RequestParam("userId") int id);
}
版權聲明
本文為[傑拉德·皮克·謝]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/204/202207230928588926.html
邊欄推薦
- 【STM32學習】(21)STM32實現步進電機
- 繪制帶有查詢條件變量的table【grafana】
- 認識接口
- LABVIEW:創建一個VI
- 界面開發框架DevExtreme Gantt控件——可導出PDF、排序任務
- MySQL命令行導出導入數據庫和數據錶
- 有數大數據基礎平臺之智能運維平臺EasyEagle介紹:集群隊列篇
- 你記住JS中offsetWidth、clientWidth、width、scrollWidth、clientX、screenX、offsetX、pageX嗎?
- 【Azure 事件中心】Azure Event Hub 新功能嘗試 -- 异地灾難恢複 (Geo-Disaster Recovery)
- unity 照片牆
猜你喜歡
隨機推薦
- *精度優化*優化策略1:網絡+SAM優化器
- AXI協議詳解
- js--Date對象&三元錶達式
- leetcode-買賣股票的最佳時機含手續費
- unity中3dUI或者模型始終面向攝像機,跟隨攝像機視角旋轉丨視角跟隨丨固定視角
- JVM初探
- 移動端測試之appium環境部署【未完待續】
- 關於後臺掛載,進程管理的學習
- 讀《高效閱讀法-最劃算的自我投資》有感
- shell基本命令
- 從鍵盤輸入一串字符,輸出不同的字符以及每個字符出現的次數。(輸出不按照順序)運用String類的常用方法解題
- 2019_AAAI_ICCN
- 影響接口查詢速度的情况
- 《STL適配器》stack和queue
- 淺析緩存的讀寫策略
- 類和對象(1)
- 實驗二 YUV
- 大咖訪談 | 開源社區裏各種奇怪的現狀——夜天之書陳梓立tison
- synchronized是如何實現的
- 【arXiv2022】GroupTransNet: Group Transformer Network for RGB-D Salient Object Detection
- BGP機房的優點
- 真人踩過的坑,告訴你避免自動化測試常犯的10個錯誤
- 判斷是否為void類型
- C語言——幾道C語言經典習題
- openvino_datawhale
- C語言基礎知識梳理(一)
- Redis源碼與設計剖析 -- 7.快速列錶
- 比特,比特,字節,字的概念與區別
- 項目部署(簡版)
- JDBC的學習以及簡單封裝
- [pytho-flask筆記5]藍圖簡單使用
- Web Component-自定義元素的生命周期
- 數倉4.0筆記——業務數據采集
- 數倉4.0筆記——用戶行為數據采集四
- 對.h5文件的迭代顯示,h5py數據操作
- 常用數學知識匯總
- “東數西算”下數據中心的液冷GPU服務器如何發展?
- 硬件知識1--原理圖和接口類型(基於百問網硬件操作大全視頻教程)
- 鋼結構基本原理複習
- Unity3d:UGUI源碼,Rebuild優化