Spring Boot 整合 OpenFeign 教程

精心整理了最新的面試資料和簡歷模板,有需要的可以自行獲取

點擊前往百度網盤獲取
點擊前往夸克網盤獲取


Spring Boot 整合 OpenFeign 教程

一、OpenFeign 簡介

OpenFeign 是 Netflix 開源的聲明式 HTTP 客戶端,通過接口和注解簡化服務間 HTTP 調用。與 Spring Cloud 深度整合后,可自動實現負載均衡(配合 Ribbon)和服務發現(配合 Eureka)。

核心特性:

  • 聲明式 API:通過接口定義 HTTP 請求
  • 集成 Ribbon:自動負載均衡
  • 支持熔斷降級:整合 Hystrix(可選)
  • 注解驅動:類似 Spring MVC 的注解風格

二、環境準備

1. 創建 Spring Boot 項目

使用 Spring Initializr 創建項目,選擇:

  • Spring Web(基礎 Web 支持)
  • Spring Cloud OpenFeign(核心依賴)

2. 添加依賴(Maven)

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>3.1.3</version> <!-- 根據 Spring Cloud 版本調整 -->
</dependency>

三、基礎整合步驟

1. 啟用 Feign 客戶端

在啟動類添加 @EnableFeignClients 注解:

@SpringBootApplication
@EnableFeignClients
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

2. 定義 Feign 客戶端接口

創建接口并使用 @FeignClient 注解:

@FeignClient(name = "user-service") // 服務名稱(需注冊到注冊中心)
public interface UserClient {@GetMapping("/users/{id}")      // 與 Spring MVC 注解一致User getUserById(@PathVariable("id") Long id);@PostMapping("/users")User createUser(@RequestBody User user);
}

3. 注入并使用客戶端

在 Controller 或 Service 中直接注入接口:

@RestController
public class DemoController {@Autowiredprivate UserClient userClient;@GetMapping("/demo/{userId}")public User getDemoUser(@PathVariable Long userId) {return userClient.getUserById(userId);}
}

四、進階配置

1. 自定義請求配置

配置超時時間(application.yml):
feign:client:config:default:  # 全局默認配置connectTimeout: 5000readTimeout: 5000user-service:  # 指定服務的配置connectTimeout: 3000readTimeout: 3000
添加請求攔截器:
public class AuthInterceptor implements RequestInterceptor {@Overridepublic void apply(RequestTemplate template) {template.header("Authorization", "Bearer " + getToken());}
}// 注冊攔截器
@Configuration
public class FeignConfig {@Beanpublic AuthInterceptor authInterceptor() {return new AuthInterceptor();}
}

2. 日志調試

配置日志級別(application.yml):

logging:level:com.example.demo.client.UserClient: DEBUG

3. 熔斷降級(整合 Hystrix)

添加依賴:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
定義降級類:
@Component
public class UserClientFallback implements UserClient {@Overridepublic User getUserById(Long id) {return new User(0L, "fallback-user");}
}// 客戶端指定降級類
@FeignClient(name = "user-service", fallback = UserClientFallback.class)
public interface UserClient {// ...
}

五、常見問題解決

1. 404 錯誤排查

  • 檢查目標服務接口路徑是否匹配
  • 確認服務是否注冊到注冊中心(Eureka/Nacos)
  • 使用 @RequestMapping 確保路徑一致性

2. 請求頭丟失問題

  • 使用 @RequestHeader 顯式傳遞頭信息:
    @GetMapping("/users/{id}")
    User getUserById(@PathVariable Long id, @RequestHeader("X-Token") String token);
    
  • 或通過攔截器統一添加

3. 復雜參數處理

使用 @SpringQueryMap 處理 POJO 參數:

@GetMapping("/search")
List<User> searchUsers(@SpringQueryMap UserQuery query);

六、最佳實踐

  1. 接口復用:將 Feign 客戶端接口單獨模塊化
  2. 配置隔離:不同服務使用獨立的配置類
  3. 異常處理:自定義 ErrorDecoder 處理異常響應
  4. 性能優化:啟用 HTTP 連接池
    feign:okhttp:enabled: true
    

七、項目結構示例

src/main/java
├── com.example.demo
│   ├── Application.java          # 啟動類
│   ├── config
│   │   └── FeignConfig.java      # Feign 全局配置
│   ├── controller
│   │   └── DemoController.java   # 控制器
│   ├── client
│   │   ├── UserClient.java       # Feign 客戶端接口
│   │   └── fallback              
│   │       └── UserClientFallback.java # 降級實現
│   └── model
│       └── User.java             # 實體類

通過本教程,您已掌握 Spring Boot 與 OpenFeign 的核心整合方法。OpenFeign 能顯著簡化服務間通信,結合 Spring Cloud 生態的其他組件,可快速構建健壯的微服務系統。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/73050.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73050.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73050.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

APM 仿真遙控指南

地面站開發了一段時間了&#xff0c;由于沒有硬件&#xff0c;所以一直在 APM 模擬器中驗證。我們已經實現了 MAVLink 消息接收和解析&#xff0c;顯示無人機狀態&#xff0c;給無人機發送消息&#xff0c;實現一鍵起飛&#xff0c;飛往指定地點&#xff0c;降落&#xff0c;返…

C語言入門教程100講(4)輸入輸出

文章目錄 1. 什么是輸入輸出&#xff1f;2. 標準輸入輸出函數2.1 printf 函數2.2 scanf 函數 3. 格式化占位符4. 示例代碼代碼解析&#xff1a;輸出結果&#xff1a; 5. 常見問題問題 1&#xff1a;scanf 中的 & 是什么作用&#xff1f;問題 2&#xff1a;printf 和 scanf …

《信息系統安全》(第一次上機實驗報告)

實驗一 &#xff1a;網絡協議分析工具Wireshark 一 實驗目的 學習使用網絡協議分析工具Wireshark的方法&#xff0c;并用它來分析一些協議。 二實驗原理 TCP/IP協議族中網絡層、傳輸層、應用層相關重要協議原理。網絡協議分析工具Wireshark的工作原理和基本使用規則。 三 實…

城市街拍人像自拍電影風格Lr調色教程,手機濾鏡PS+Lightroom預設下載!

調色教程 城市街拍人像自拍的電影風格 Lr 調色&#xff0c;是利用 Adobe Lightroom 軟件&#xff0c;對在城市街景中拍攝的人像自拍照片進行后期處理&#xff0c;使其呈現出電影畫面般獨特的視覺質感與藝術氛圍。通過一系列調色操作&#xff0c;改變照片的色彩、明暗、對比等元…

自學Python創建強大AI:從入門到實現DeepSeek級別的AI

人工智能&#xff08;AI&#xff09;是當今科技領域最熱門的方向之一&#xff0c;而Python是AI開發的首選語言。無論是機器學習、深度學習還是自然語言處理&#xff0c;Python都提供了豐富的庫和工具。如果你夢想創建一個像DeepSeek這樣強大的AI系統&#xff0c;本文將為你提供…

Qt/C++項目積累:4.遠程升級工具 - 4.1 項目設想

背景&#xff1a; 桌面程序一般都支持遠程升級&#xff0c;也是比較常用的場景設計。如酷狗音樂的升級&#xff0c;會提供兩個選項&#xff0c;自動幫助安裝或是新版本提醒&#xff0c;由用戶來決定是否升級&#xff0c;都屬于遠程升級的應用及策略。 看看經過這塊的功能了解及…

(一)丶Windows安裝RabbitMQ可能會遇到的問題

一丶可能會忘了配置ERLang的環境變量 二丶執行命令時報錯 第一步 rabbitmq-plugins enable rabbitmq_management 第二部 rabbitmqctl status 三丶修改.erlang.cookie 文件 1.找到C盤目下的.erlang.cookie文件 C:\Users\admin\.erlang.cookie C:\Windows\System32\config\sys…

Amdahl 定律

Amdahl 定律是用來表示&#xff0c;當提高系統某部分性能時對整個系統的影響&#xff0c;其公式如下&#xff1a; a表示我們提升部分初始耗時比例&#xff0c;k是我們的提升倍率&#xff0c;通過這個公式我們可以輕松的得知對每一部分的提醒&#xff0c;對整個系統帶來的影響…

HW華為流程管理體系精髓提煉華為流程運營體系(124頁PPT)(文末有下載方式)

資料解讀&#xff1a;HW華為流程管理體系精髓提煉華為流程運營體系&#xff08;124頁PPT&#xff09; 詳細資料請看本解讀文章的最后內容。 華為作為全球領先的科技公司&#xff0c;其流程管理體系的構建與運營是其成功的關鍵之一。本文將從華為流程管理體系的核心理念、構建…

Powershell WSL導出導入ubuntu22.04.5子系統

導出Linux子系統 導出位置在C盤下,根據自己的實際情況更改即可Write-Host "export ubuntu22.04.5" -ForegroundColor Green wsl --export Ubuntu-22.04 c:\Ubuntu-22.04.tar 導入Linux子系統 好處是目錄可用在任意磁盤路徑,便于遷移不同的設備之間Write-Host &quo…

【Attention】SKAttention

SKAttention選擇核注意力 標題&#xff1a;SKAttention 期刊&#xff1a;IEEE2019 代碼&#xff1a; https://github.com/implus/SKNet 簡介&#xff1a; 動機:增大感受野來提升性能、多尺度信息聚合方式解決的問題&#xff1a;自適應調整感受野大小創新性:提出選擇性內核…

解決Popwindow寬高的問題。

問題 在使用Popwindow進行自定義的過程中&#xff0c;需要設置popwindow的寬高。但是寬高很多時候容易出問題。比如下面的例子。 布局文件如下 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.andr…

MySQL數據庫精研之旅第二期:庫操作的深度探索

專欄&#xff1a;MySQL數據庫成長記 個人主頁&#xff1a;手握風云 目錄 一、查看數據庫 二、創建數據庫 2.1. 語法 2.2. 示例 三、字符集編碼和校驗(排序)規則 3.1. 查看數據庫支持的字符集編碼 3.2. 查看數據庫支持的排序規則 3.3. 不同的字串集與排序規則對數據庫的…

基于deepseek的智能語音客服【第四講】封裝milvus數據庫連接池封裝

通過工廠模式創建鏈接 static {// 創建連接池工廠BasePooledObjectFactory<MilvusServiceClient> factory new BasePooledObjectFactory<MilvusServiceClient>() {Overridepublic MilvusServiceClient create() throws Exception {return new MilvusServiceClient…

STM32基礎教程——定時器

前言 TIM定時器&#xff08;Timer&#xff09;:STM32的TIM定時器是一種功能強大的外設模塊&#xff0c;通過時基單元&#xff08;包含預分頻器、計數器和自動重載寄存器&#xff09;實現精準定時和計數功能。其核心原理是&#xff1a;內部時鐘&#xff08;CK_INT&#xff09;或…

OpenCV旋轉估計(4)生成一個字符串表示的匹配圖函數 matchesGraphAsString()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 matchesGraphAsString 函數是OpenCV庫中的一部分&#xff0c;位于 cv::detail 命名空間下。這個函數的主要作用是生成一個字符串表示的匹配圖&am…

Android 根據Url使用Retrofit框架進行文件下載

一、背景 根據后端返回的url下載地址,去執行文件下載&#xff0c;將文件保存到SD卡。這里使用Retrofit網絡框架。 二、代碼實現 2.1、定義一個DownloadFileService interface DownloadFileService {StreamingGETsuspend fun downloadFile(Url fileUrl: String):ResponseBody…

NVMe(Non-Volatile Memory Express)詳解

一、NVMe的定義與核心特性 NVMe&#xff08;非易失性內存主機控制器接口規范&#xff09;是一種 基于PCIe總線的高性能存儲協議&#xff0c;專為固態硬盤&#xff08;SSD&#xff09;設計&#xff0c;旨在替代傳統的AHCI協議&#xff08;如SATA&#xff09;。其核心特性包括&a…

機器學習——KNN超參數

sklearn.model_selection.GridSearchCV 是 scikit-learn 中用于超參數調優的核心工具&#xff0c;通過結合交叉驗證和網格搜索實現模型參數的自動化優化。以下是詳細介紹&#xff1a; 一、功能概述 GridSearchCV 在指定參數網格上窮舉所有可能的超參數組合&#xff0c;通過交叉…