Eureka、Nacos、LoadBalance、OpenFeign?之間的區別聯系和協作 (附代碼講解)

這篇文章聊聊微服務里的這幾個老伙計:Eureka、Nacos、LoadBalance、OpenFeign。

咱們做微服務開發,總會跟這幾個組件打交道:Eureka、Nacos、Spring Cloud LoadBalancer、OpenFeign。它們各司其職又互相配合,今天就把它們的關系、用法捋清楚,再上點代碼示例,保證看完就明白。?不然很久不用就忘了。

先從注冊中心說起,這倆貨是服務的 "通訊錄"?

不管是 Eureka 還是 Nacos,核心作用都一樣:讓各個微服務能互相找到對方。服務啟動時會把自己的地址報到注冊中心,調用的時候再從注冊中心查對方的地址。但用法上差別不小。?

Eureka 得自己搭服務器,咱們用 Eureka 的話,得單獨起一個 Eureka Server 服務。步驟大概是這樣:?

  1. 加依賴,server 端用 spring-cloud-starter-netflix-eureka-server,client 端用 spring-cloud-starter-netflix-eureka-client。?
  2. 啟動類上得加 @EnableEurekaServer(服務器端),client 端不用加特殊注解但得配置。?
  3. 配置文件里,server 要指定自己的地址,client 要指定 server 的地址。?

舉個例子,Eureka Server 的配置:?

# application.yml
server:port: 8761
eureka:client:register-with-eureka: false  # 自己不注冊自己fetch-registry: false        # 不用拉取服務列表serviceUrl:defaultZone: http://localhost:8761/eureka/

啟動類:?

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

?

客戶端的配置就簡單點,加個依賴,然后配置文件里指定 server 地址:?

spring:application:name: user-service  # 服務名很重要,后面調用要用
eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/

而 Nacos 就省事兒多了,它本身是個現成的服務器,咱們不用自己搭。直接用人家提供的 Nacos Server(可以下載安裝包啟動),咱們的服務作為 client 連上去就行。?

用法上:?

  1. 只需要加一個依賴:spring-cloud-starter-alibaba-nacos-discovery。?
  1. 配置文件里指定 Nacos Server 的地址,不用管服務器端的事兒。?

代碼示例:?

# application.yml
spring:application:name: order-servicecloud:nacos:discovery:server-addr: localhost:8848  # Nacos Server的地址

啟動類不用加特殊注解,直接啟動就行,服務會自動注冊到 Nacos。?

所以 Nacos 比 Eureka 省事兒,不用自己維護注冊中心服務器,這是最大的區別。?

再看服務調用,RestTemplate 加 LoadBalance 是基礎操作?

微服務之間調用,本質上就是發 HTTP 請求。RestTemplate 是 Spring 提供的工具,能幫咱們發請求。但直接用 RestTemplate 的話,得知道對方的 IP 和端口,這顯然不現實 —— 服務可能多實例部署,IP 端口會變。?

這時候就需要 Spring Cloud LoadBalancer 了,它能做兩件事:從注冊中心拿到服務的所有實例地址,然后根據策略(比如輪詢、隨機)選一個出來,也就是負載均衡。?

咱們用 RestTemplate+LoadBalance 的組合,就能直接用服務名調用,不用管具體 IP 了。?

步驟如下:?

  1. 加依賴,spring-cloud-starter-loadbalancer(Nacos 的依賴里可能已經包含,保險起見還是加上)。?
  2. 配置 RestTemplate 的時候,加個 @LoadBalanced 注解,告訴它要用負載均衡。?

代碼示例:?

@Configuration
public class RestTemplateConfig {@Bean@LoadBalanced  // 關鍵,加上這個才能用服務名調用public RestTemplate restTemplate() {return new RestTemplate();}
}

調用的時候,直接用服務名代替 IP: 端口:?

@Service
public class OrderService {@Autowiredprivate RestTemplate restTemplate;public User getUser(Long userId) {// 直接寫 "http://服務名/接口路徑",這里的user-service就是注冊的服務名return restTemplate.getForObject("http://user-service/user/" + userId, User.class);}
}

LoadBalance 默認是輪詢策略,就是挨個調用服務實例。想改隨機的話,寫個配置類就行:?

@Configuration
public class LoadBalancerConfig {@Beanpublic ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory) {String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);}
}

要是想搞更自定義的策略,比如按服務實例的負載情況分配,有兩種辦法:要么自己實現 ReactorLoadBalancer 接口,要么給 RestTemplate 加個攔截器,在攔截器里寫選擇邏輯,甚至直接在業務代碼里查服務列表再手動選。不過一般默認的或者簡單自定義就夠了。?

再說說 OpenFeign,這貨是 RestTemplate 的 "升級版"?

用 RestTemplate 調用雖然比寫死 IP 強,但還是得拼接 URL、處理響應,不夠優雅。OpenFeign 就方便多了,它是聲明式的調用工具,自帶了 LoadBalance,不用額外配置,寫起來像調本地接口一樣。?

用法步驟:?

  1. 加依賴,spring-cloud-starter-openfeign。?
  2. 啟動類上得加 @EnableFeignClients,告訴程序要掃描 Feign 接口。?
  3. 寫個接口,用 @FeignClient ("服務名") 標注,里面定義要調用的接口方法,路徑、參數跟服務端的接口對應上。?
  4. 直接注入這個接口,像用本地方法一樣調用。?

代碼示例:?

先寫 Feign 接口:?

// 聲明要調用的服務名是user-service
@FeignClient(value = "user-service")
public interface UserFeignClient {// 這里的路徑、參數要跟user-service里的接口完全一致@GetMapping("/user/{userId}")User getUser(@PathVariable("userId") Long userId);
}

啟動類加注解:?

@SpringBootApplication
@EnableFeignClients  // 關鍵,開啟Feign
public class OrderApp {public static void main(String[] args) {SpringApplication.run(OrderApp.class, args);}
}

調用的時候直接用:?

@Service
public class OrderService {@Autowiredprivate UserFeignClient userFeignClient;  // 注入Feign接口public User getUser(Long userId) {// 像調本地方法一樣,直接調用接口的方法return userFeignClient.getUser(userId);}
}

是不是比 RestTemplate 清爽多了?而且它自帶負載均衡,不用再操心 @LoadBalanced 的事兒,內部已經集成了。?

最后總結下它們的聯系和區別?

聯系很簡單:注冊中心是基礎,沒有它服務之間找不到對方;LoadBalance 是 "調度員",負責把請求合理分配給多個服務實例;RestTemplate 和 OpenFeign 是 "信使",負責發請求,其中 OpenFeign 封裝了 RestTemplate 和 LoadBalance,用起來更方便。?

區別主要在這幾點:?

  1. 注冊中心:Eureka 需要自己搭服務器,Nacos 直接用現成的,配置更簡單;Nacos 除了注冊中心還有配置中心功能,Eureka 只做注冊發現。?
  2. 負載均衡:LoadBalance 是單獨的負載均衡工具,RestTemplate 必須配合它才能用服務名調用;OpenFeign 自帶 LoadBalance,不用額外配置。?
  3. 服務調用:RestTemplate 是基礎工具,需要手動寫調用代碼;OpenFeign 是聲明式的,更簡潔,適合復雜場景。?

咱們實際開發中,現在用 Nacos+OpenFeign 的組合比較多,Nacos 省事,OpenFeign 寫起來方便。當然 RestTemplate 也得會,簡單場景下用著也挺快。?

大概就是這些了,這幾個組件配合起來,就能讓微服務之間的調用既靈活又可靠。代碼示例都給了,照著試一遍,肯定能掌握。

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

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

相關文章

JavaSE-繼承

繼承&#xff08;inheritance&#xff09;繼承的意義我們首先來看下面兩個類&#xff1a;public class Dog {public String name;public int age;public void eat(){System.out.println(this.name"正在吃飯");}public void bark(){System.out.println(this.name"…

第二屆虛擬現實、圖像和信號處理國際學術會議(VRISP 2025)

重要信息 官網&#xff1a;www.icvisp.net 時間&#xff1a;2025年8月1-3日 地點&#xff1a;中國-長沙 簡介 近年來&#xff0c;虛擬現實技術取得了顯著進步&#xff0c;與5G、云計算和物聯網等新一代信息技術的融合加速&#xff0c;推動了其在硬件、軟件和內容應用等方面…

SpringBoot+Mybatis+MySQL+Vue+ElementUI前后端分離版:整體布局、架構調整(二)

目錄 一、前言 二、后端調整 1.實體類調整 2.菜單相關接口 3.用戶相關接口 4.新增工具類 5.新增菜單樹返回類 6.配置類、攔截器 三、前端調整 1.請求調整 2.頁面布局、樣式調整 1.user.vue 2.index.vue 3.請求攔截 四、開發過程中的問題 五、附&#xff1a…

vue3官方文檔學習心得

這幾天抽空把vue3的文檔整個看了一遍。簡介 | Vue.js 23年寫過一個vue2的項目&#xff0c;24年寫了一個vue3的項目&#xff0c;頁面功能比較簡單&#xff0c;用幾個簡單的API&#xff0c;watch、watchEffect、ref、reactive就能實現的業務功能。 寫了幾年的react的&#xff0…

Pycharm恢復默認設置,配置導致復制粘貼等不能使用

在file 種找到manage IDE settings在manage IDE settings中找到restore default settings

【王樹森推薦系統】召回12:曝光過濾 Bloom Filter

概述 曝光過濾通常是在召回階段做&#xff0c;具體的方法就是用 Bloom Filter 曝光過濾問題 如果用戶看過某個物品&#xff0c;則不再把該物品曝光給用戶。原因是同一個物品重復曝光給用戶會損害用戶體驗&#xff0c;但也不是所有推薦系統都有曝光過濾&#xff0c;像 youtube 這…

基于STM32單片機的心率血氧監測系統設計(STM32代碼編寫+手機APP設計+PCB設計+Proteus仿真)

系列文章目錄 文章目錄 系列文章目錄前言1 資料獲取與演示視頻1.1 資料介紹1.2 資料獲取1.3 演示視頻 2 系統框架3 硬件3.1 主控制器3.2 顯示屏3.3 WIFI模塊3.4心率血氧傳感器 4 設計PCB4.1 安裝下載立創EDA專業版4.2 畫原理圖4.4 使用嘉立創下單助手進行下單&#xff0c;打板。…

main(int argc,char **agrv)的含義

今天和大家討論一個常見的但是不容易深入了解的知識點。那就是 main 函數聲明中使用到的 argc 和 argv 的含義。通常我們寫主函數的時候一般都是直接使用int main() 或者 void main() 來聲明 main 函數。但是你知道嗎&#xff1f;在c89/c99的語言標準中&#xff0c;main函數的聲…

如何簡單實現發版不影響客戶使用?nginx負載

nginx負載發版不影響客戶使用 1.需要二臺服務器 2.二臺服務器均是正式環境配置 3.服務器Nginx配置修改 發版順序&#xff1a;先在服務器2發版&#xff0c;發布成功后&#xff0c;再改服務器Nginx配置&#xff0c;重新加載nginx&#xff1b;然后在服務器再發版&#xff0c;發布成…

qt筆記(1)——Qtablewidget使用

1.基礎使用方法 &#xff08;略&#xff09; 2.坑和注意點 2.1 設置一個單元格的編輯屬性 在代碼中&#xff0c;想要修改一個單元格的編輯屬性&#xff0c;需要對這個item的flags進行設置&#xff1b;注意對一個tablewidget的一個item成員進行設置后&#xff0c;進行一次編…

字符串的模糊匹配方法介紹

字符串的模糊匹配方法介紹 目錄字符串的模糊匹配方法介紹一、編輯距離&#xff08;Levenshtein Distance&#xff09;復雜度分析二、Jaro-Winkler 距離復雜度分析三、最長公共子序列&#xff08;LCS&#xff09;復雜度分析四、模糊搜索&#xff08;Fuzzy Search&#xff09;復雜…

ActiveMQ在Spring Boot中的詳細使用指南

?? 目錄 ?? ActiveMQ簡介 什么是ActiveMQ? 核心概念 ??? 基礎架構組件 ?? 重要概念解釋 ActiveMQ vs 其他消息中間件 ?? 環境搭建 1. ActiveMQ服務端安裝 Docker方式(推薦初學者) 手動安裝方式 2. 驗證安裝 訪問Web管理界面 連接參數 測試連接 ?…

二元一次方程

前言 最近剛學二元一次方程&#xff0c;想寫一篇專欄熟悉一下本文寫給初一的同學看&#xff0c;學過的就劃了吧二元一次方程 兩個未知數最高項次數為 111 次為整式方程二元一次方程的解不唯一&#xff0c;但是二元一次方程可以用一個未知數來表達另一個未知數eg:eg:eg: xy1x y…

AI編程的未來是智能體原生開發?

目錄 前言 一、從“串行”到“并行”&#xff1a;什么是智能體原生開發&#xff1f; 1.1 傳統模式&#xff08;串行思維&#xff09; 1.2 智能體原生模式&#xff08;并行思維&#xff09; 二、程序員的新角色&#xff1a;從代碼手藝人到系統思想家 三、軟件開發的終局&a…

【牛客刷題】小紅的與運算

文章目錄 一、題目介紹1.1 題目描述1.2 輸入描述1.3 輸出描述1.4 示例二、 解題思路2.1 核心算法設計2.2 性能優化關鍵2.3 算法流程圖三、解法實現3.1 解法一:基礎實現3.1.1 初級版本分析3.2 解法二:優化版本(推薦)3.2.1 優化版本分析四、總結與拓展4.1 關鍵優化技術4.2 算…

spring中 方法上@Transation實現原理

Spring中Transactional注解方法實現原理Spring的Transactional注解在方法級別實現事務管理的原理主要基于動態代理和攔截器機制&#xff0c;以下是其核心實現流程&#xff1a;1. 代理創建階段當Spring容器啟動時&#xff0c;會為帶有Transactional注解的類創建代理對象&#xf…

qt-C++語法筆記之Stretch與Spacer的關系分析

qt-C語法筆記之Stretch與Spacer的關系分析 code review! 文章目錄qt-C語法筆記之Stretch與Spacer的關系分析1. Stretch&#xff08;拉伸因子&#xff09;2. Horizontal Spacer 和 Vertical Spacer3. Stretch 和 Spacer 的關系4. 實際應用中的選擇5. 注意事項6. 代碼與 Qt Desig…

Qwen3技術綜述

1. 引入 2025年5月&#xff0c;qwen推出了旗艦模型&#xff08;flagship model&#xff09;Qwen3-235B-A22B。并以Apache 2.0版權發布&#xff08;可自由商業使用&#xff0c;修改代碼和商用要包含原始版權&#xff09;。本文對其技術報告中提到的數據處理技術與模型結構進行綜…

[特殊字符] Excel 讀取收件人 + Outlook 批量發送帶附件郵件 —— Python 自動化實戰

許多公司定期需要將不同部門或客戶的報告發送給指定人員。手動操作容易出錯、耗時且繁瑣。今天這篇文章教你如何利用 Python 實現&#xff1a; &#x1f9e9; 從 Excel 中讀取“收件人 抄送人 附件文件路徑”&#xff1b; &#x1f4e4; 使用 win32com.client 調用 Outlook …

多模態大語言模型arxiv論文略讀(152)

VidComposition: Can MLLMs Analyze Compositions in Compiled Videos? ?? 論文標題&#xff1a;VidComposition: Can MLLMs Analyze Compositions in Compiled Videos? ?? 論文作者&#xff1a;Yunlong Tang, Junjia Guo, Hang Hua, Susan Liang, Mingqian Feng, Xinya…