什么是 OpenFeigin ?微服務中的具體使用方式

什么是Feign?

Feign 是一種聲明式的 HTTP 客戶端框架,主要用于簡化微服務架構中服務之間的遠程調用,也可以通過定義接口和注解的方式調用遠程服務,無需手動構建 HTTP 請求或解析響應數據。Spring Cloud 對 Feign 進行了增強,集成了 負載均衡和 服務發現,并支持 Spring MVC 注解。

Feign 的優點

  1. 聲明式調用,簡潔易用
    場景在于微服務架構中的服務調用 :在 Spring Cloud 微服務系統中,Feign 是服務間通信的首選工具。例如,電商平臺的訂單模塊調用庫存模塊檢查庫存,通過 @FeignClient 定義庫存服務的接口,調用方法如同本地調用,自動完成服務發現和負載均衡。

  2. 內置負載均衡
    在高并發場景下,Feign 結合 Ribbon 實現客戶端負載均衡,自動選擇服務實例,適合需要高可用性和性能的分布式系統。

  3. 與 Spring Cloud 生態無縫集成

  4. 可擴展性
    例如,可以通過攔截器實現統一鑒權或日志記錄。同時還有微服務系統中通過全局攔截器為所有請求添加 JWT 認證信息。

  5. 減少代碼冗余
    場景:訂單模塊和支付模塊共享同一狀態機接口,通過 Feign 接口抽取實現代碼復用。

  6. 支持動態代理,調用簡便
    屏蔽了底層的 HTTP 通信細節

OpenFeign 在微服務中的具體使用方式

以下是 OpenFeign 在 Spring Cloud 微服務架構中的具體使用方式,包含配置、實現和典型場景的步驟說明:

1. 添加依賴

確保項目中還引入了 Spring Cloud 相關依賴,并與 Spring Boot 版本兼容。

2. 啟用 Feign 客戶端

在 Spring Boot 應用的主類上添加 @EnableFeignClients 注解,啟用 Feign 客戶端功能。

3. 定義 Feign 客戶端接口

創建一個接口,使用 @FeignClient 注解指定目標服務名稱或直接指定 URL,定義遠程調用的方法。

4. 注入和調用 Feign 客戶端

在業務代碼中通過 Spring 的依賴注入使用 Feign 客戶端,像調用本地方法一樣調用遠程服務。

5. 配置 Feign

可以通過配置文件(application.yml 或 application.properties)調整 Feign 的行為,例如超時、日志級別等

  • 日志配置:啟用 FULL 日志級別可以查看 Feign 的請求和響應詳情,適合調試。
  • 超時配置:設置連接和讀取超時,防止服務調用長時間阻塞。
6. 集成負載均衡和服務發現

Feign 默認集成了 Ribbon 和 Eureka:

  • Ribbon:提供客戶端負載均衡,自動在目標服務的多個實例間分配請求。
  • Eureka:通過服務名動態發現服務實例的地址。

確保 Eureka 客戶端依賴已引入,并在 application.yml 中配置 Eureka

7. 添加攔截器

Feign 支持自定義攔截器,用于統一添加請求頭、認證信息或日志記錄。例如,添加 JWT 認證的攔截器。

8. 異常處理

Feign 支持自定義錯誤解碼器,處理遠程調用異常。例如,捕獲 404 錯誤并拋出自定義異常。

9. 使用場景

以下是 OpenFeign 在微服務中的典型應用場景及實現方式:

  • 服務間通信
    場景:訂單服務需要調用用戶服務獲取用戶信息。
    實現:定義 @FeignClient 接口,調用用戶服務的 /users/{id} 接口,獲取用戶信息并組裝訂單數據。
  • 調用第三方 API
    場景:調用外部支付平臺(如支付寶)的 API。
    實現:配置 @FeignClient(url = "https://api.alipay.com"),定義支付相關接口,直接調用。
  • 批量請求
    場景:批量查詢多個用戶的信息。
    實現:定義 Feign 接口支持 POST 請求,傳遞用戶 ID 列表,返回批量用戶信息。
  • 斷路器集成
    場景:服務調用失敗時提供降級邏輯。
    實現:結合 Hystrix 或 Sentinel,配置 Feign 的降級策略。例如,使用 @FeignClient(fallback = UserServiceFallback.class) 指定降級實現。
10. 注意事項
  • 服務名大小寫:Eureka 中的服務名對大小寫敏感,確保 @FeignClient 的 name 與注冊中心一致。
  • 依賴版本:Spring Cloud 和 OpenFeign 的版本需匹配,避免兼容性問題。
  • 性能優化:高并發場景下,調整 Feign 的連接池(如使用 OkHttp 客戶端)和超時配置。
  • 接口復用:將公共 Feign 接口抽取到獨立模塊(如 feign-api),通過 Maven 依賴共享,減少代碼冗余。

?

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

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

相關文章

對抗性提示:進階守護大語言模型

人工智能模型正快速進化 —— 變得更具幫助性、更流暢,并且更深入地融入我們的日常生活和商業運營中。但隨著其能力的提升,風險也在增加。在維護安全可信的人工智能方面,最緊迫的挑戰之一是對抗性提示:這是一種微妙且通常富有創意…

運營商頻段

以下是三大運營商(中國移動、中國電信、中國聯通)及中國廣電的 5G 主要頻段 及其所屬運營商的整理表格: 運營商頻段上行頻率 (MHz)下行頻率 (MHz)帶寬備注廣電n28703-733758-788230MHz移動共享n794900-4960-60MHz-移動n412515-2675-160MHz-n7…

項目拓展-Apache對象池,對象池思想結合ThreadLocal復用日志對象

優化日志對象創建以及日志對象復用 日志對象上下文實體類 traceId 請求到達時間戳 請求完成時間戳 請求總共耗費時長 get/post/put/delete請求方式 Http狀態碼 原始請求頭中的所有鍵值對 請求體內容 響應體內容 失敗Exception信息詳細記錄 是否命中緩存 package c…

Javaweb - Vue入門

Vue是一款用于構建用戶界面的漸進式的JavaScript框架。 使用步驟 引入Vue模塊,創建Vue的應用實例,定義元素,交給Vue控制。 一、引入Vue模塊 因為使用的是模塊化的JavaScript,因此在script標簽內要聲明一個屬性:typ…

C++ 標準模板庫各個容器的應用場景分析

C 標準模板庫(STL)中的容器分為序列式容器、關聯式容器和無序容器,各自適用于不同場景。以下是主要容器的應用場景及案例: 一、序列式容器 元素按插入順序存儲,支持線性訪問。 1. vector 場景:動態數組…

安裝前端vite框架,后端安裝fastapi框架

前期準備 首先新建一個文件夾,文件夾里面新建一個文件夾,用于安裝依賴 安裝vite框架 npm init -y 目的是安裝package.json配置文件 npm install vite --save-dev 安裝vite框架 安裝完是這個樣子 新建了一個文件夾和js文件 后端內容 main.js document.…

深度學習:基礎與概念(第1章:深度學習革命)

目錄 第1章:深度學習革命 1.1深度學習的影響 1.1.1醫療診斷 1.1.2蛋白質結構預測 1.1.3圖像合成 1.1.4大語言模型 1.2一個教學示例 1.2.1合成數據 1.2.2線性模型 1.2.3誤差函數 1.2.4模型復雜度 1.2.5正則化 1.2.6模型選擇 1.3機器學習簡史 1.3.1單層…

通過觸發器統計訪問數據庫的客戶端IP地址

通過觸發器統計訪問數據庫的客戶端IP地址 創建用戶登錄審計表創建登錄審計觸發器查看登錄審計結果禁用和啟用觸發器創建用戶登錄審計表 創建記錄表: create table appuser1.user_login_audit (login_time DATE,session_id number,username VARCHAR2(30),os_user VARCHAR2(30…

在MCU上的1微秒的延遲實現方案及測量方法

運行環境: stm32h743iit6; 主頻480MHz; APB1; 240MHz; TIM5 240MHz; 預分頻系數為1; 定時器計數頻率240MHz; 應用需求:實現軟件模擬IIC,延遲精度2個微秒; 量變引起質變,當延遲粒度太小時,需要考…

macos電腦本地搭建mistral-7b大模型出現4-bit量化和緩存不足問題的記錄

問題背景 本人想再本地筆記本電腦上搭建一個mistral-7b的大模型,在搭建的過程中,出現了4-bit量化模式無法處理的問題,以及電腦內存/顯存不足的問題,導致無法搭建 電腦硬件信息 名稱:2019 Mac book pro 內存&#xff1a…

C# 基礎知識總結(帶詳細文字說明)

1. 基礎語法結構 C# 程序由命名空間、類和方法組成。每個程序必須有一個 Main 方法作為入口點。using 指令用于導入命名空間,Console.WriteLine() 是常用的輸出方法。 csharp 復制 下載 using System; // 引入核心命名空間class Program // 類定義 {static v…

C#最佳實踐:為何要統一命名

C#最佳實踐:為何要統一命名 在 C# 編程的世界里,代碼就像是一座龐大的數字城市,而命名則是城市中縱橫交錯的街道名稱與建筑標識。如果沒有統一的命名規范,這座城市將陷入混亂,開發者在其中探索、維護代碼時也會迷失方向。統一命名不僅是一種編程習慣,更是保障代碼質量、…

通過后端連接Opengauss數據庫的方法

文章目錄 通過后端連接Opengauss數據庫的方法一、為什么默認不能訪問?二、要讓普通用戶從宿主機訪問數據庫,需要以下幾個步驟:1. 使用 omm 超級用戶登錄數據庫2. 創建一個應用程序專用用戶,并設置密碼3. 提供給應用程序專用用戶對…

AWS Config:概述、優勢以及如何開始?

在當今云原生架構快速發展的背景下,越來越多企業意識到資源配置管理和合規性審查的重要性。作為 AWS 官方授權代理商,在云上致力于為企業客戶提供全面、可靠的云服務解決方案,幫助企業輕松上云、合規運營。本文將為您詳細解讀 AWS Config ——…

金融領域LLM開源測試集

BizFinBench 中文 金融業務場景基準數據集 結合迭代校準評估框架IteraJudge,對25個先進LLM進行全面評估,發現在金融AI領域與人類期望存在顯著性能差距。 https://arxiv.org/pdf/2505.19457 https://github.com/HiThink-Research/BizFinBench/tree/m…

跨語言RPC:使用Java客戶端調用Go服務端的JSON-RPC服務

在分布式系統開發中,不同編程語言之間進行通信是一個常見的需求。通過遠程過程調用(RPC)技術,我們可以讓不同的程序像調用本地方法一樣調用遠程的服務。本文將介紹如何使用Go語言編寫一個簡單的JSON-RPC服務,并使用Jav…

UE5 創建AI控制器、AI行為樹和黑板

UE5 創建AI控制器、AI行為樹和黑板 一、創建AI控制器AIController(大腦) 二、創建AI行為樹和黑板 1:AI人工智能 2:行為樹 3:黑板 三、AI行為樹藍圖和添加黑板 1:添加黑板(腦電波)…

CDN加速導致CLS升高圖片托管服務器的3個選擇標準!

許多網站為了提升加載速度,會采用CDN加速服務分發圖片等靜態資源 這樣做可能導致CLS(累積布局偏移)指標升高,拖累SEO評分。 這一問題通常源于CDN的異步加載機制或圖片尺寸未預定義,使得頁面布局在渲染過程中頻繁變動。…

MySQL(77)如何設置自動備份任務?

設置自動備份任務可以確保你的數據庫定期備份,防止數據丟失。以下是如何使用 Bash 腳本和 Cron 任務在 Linux 系統上設置 MySQL 數據庫的自動備份任務的詳細步驟和代碼示例。 1. 編寫備份腳本 首先,我們需要編寫一個備份腳本。這個腳本將包含執行備份的…

.NET 開發中全局數據存儲的幾種方式

文章目錄 一、靜態類與靜態成員實現方式特點優缺點 二、應用程序配置系統1. appsettings.json (ASP.NET Core)使用方式2. 用戶設置 (WinForms/WPF)特點 三、依賴注入容器ASP.NET Core 示例特點 四、內存緩存 (IMemoryCache)實現方式特點 五、分布式緩存 (IDistributedCache)實現…