Nacos的基本功能以及使用Feign進行微服務間的通信

Nacos是Dynamic Naming and Configuration Service的縮寫。What’s Nacos?

下面結合SpringBoot項目,為你介紹Nacos的基本功能以及如何使用Feign進行微服務間的通信。

一、Nacos的基本功能

Nacos是阿里巴巴開源的一個更易于構建云原生應用的動態服務發現、配置管理和服務管理平臺。它的主要功能包括:

  1. 服務發現與注冊:微服務可以在Nacos中注冊自己,并發現其他服務。
  2. 配置管理:集中管理所有微服務的配置。
  3. 服務健康監測:檢查服務的健康狀態。
  4. 動態DNS服務:通過域名來訪問服務。

二、依賴配置

要在SpringBoot項目中使用Nacos和Feign,需要在pom.xml中添加以下依賴:

<!-- 服務注冊與發現 -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency><!-- 配置管理 -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency><!-- Feign客戶端 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency><!-- Spring Cloud 依賴管理 -->
<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.SR12</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.9.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

三、配置文件

application.propertiesapplication.yml中配置Nacos服務地址:

# 應用名稱
spring:application:name: service-consumercloud:nacos:discovery:server-addr: 127.0.0.1:8848  # Nacos服務器地址config:server-addr: 127.0.0.1:8848  # Nacos配置中心地址file-extension: yaml  # 配置文件格式# 端口號
server:port: 8080

四、代碼實現

1. 服務提供者(service-provider)

首先創建一個簡單的服務提供者,提供一個API接口:

package com.example.provider.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@GetMapping("/hello/{name}")public String sayHello(@PathVariable String name) {return "Hello, " + name + "! I'm from service-provider.";}
}

啟動類上添加@EnableDiscoveryClient注解:

package com.example.provider;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication
@EnableDiscoveryClient
public class ServiceProviderApplication {public static void main(String[] args) {SpringApplication.run(ServiceProviderApplication.class, args);}
}
2. 服務消費者(service-consumer)

創建Feign客戶端接口,調用服務提供者的API:

package com.example.consumer.feign;import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;@FeignClient(name = "service-provider")  // 服務提供者的應用名稱
public interface HelloFeignClient {@GetMapping("/hello/{name}")  // 服務提供者的API路徑String sayHello(@PathVariable String name);
}

創建Controller,使用Feign客戶端調用服務:

package com.example.consumer.controller;import com.example.consumer.feign.HelloFeignClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ConsumerController {@Autowiredprivate HelloFeignClient helloFeignClient;@GetMapping("/call/{name}")public String callProvider(@PathVariable String name) {return helloFeignClient.sayHello(name);}
}

啟動類上添加@EnableFeignClients注解:

package com.example.consumer;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;@SpringBootApplication
@EnableFeignClients
public class ServiceConsumerApplication {public static void main(String[] args) {SpringApplication.run(ServiceConsumerApplication.class, args);}
}

五、Nacos配置中心使用示例

創建一個配置類,讀取Nacos配置中心的配置:

package com.example.consumer.config;import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;@Component
@RefreshScope  // 支持配置動態刷新
public class AppConfig {@Value("${app.name:default}")private String appName;@Value("${app.version:1.0.0}")private String appVersion;public String getAppName() {return appName;}public String getAppVersion() {return appVersion;}
}

創建Controller,獲取配置信息:

package com.example.consumer.controller;import com.example.consumer.config.AppConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ConfigController {@Autowiredprivate AppConfig appConfig;@GetMapping("/config")public String getConfig() {return "App Name: " + appConfig.getAppName() + ", Version: " + appConfig.getAppVersion();}
}

在Nacos配置中心創建配置文件service-consumer.yaml

app:name: MyServiceConsumerversion: 1.0.1

六、測試步驟

  1. 啟動Nacos服務器(下載并解壓Nacos,運行startup.sh -m standalone)。
  2. 啟動服務提供者(service-provider)。
  3. 啟動服務消費者(service-consumer)。
  4. 訪問服務消費者的API:http://localhost:8080/call/World,會返回Hello, World! I'm from service-provider.
  5. 訪問配置信息:http://localhost:8080/config,會返回Nacos配置中心的配置信息。

通過上述示例,你可以看到Nacos的服務注冊與發現、配置管理功能,以及Feign如何簡化微服務間的通信。

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

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

相關文章

C1編譯器和C2編譯器Test01

在HotSpot VM中內嵌有兩個JIT編譯器&#xff0c;分別為Client Compiler和Server Compiler&#xff0c;通常簡稱為C1編譯器和C2編譯器。開發人員可以通過如下命令顯式指定JVM在運行時到底使用哪一種即時編譯器。(1)-client&#xff1a;指定JVM運行在Client模式下&#xff0c;并使…

MongoDB與Spring Boot完整使用指南

目錄 1. MongoDB基礎概念 什么是MongoDB? 核心概念對比 文檔結構示例 2. MongoDB的特點與優勢 主要特點 適用場景 3. MongoDB基本操作 基本CRUD操作 插入文檔 查詢文檔 更新文檔 刪除文檔 4. Spring Boot集成MongoDB 步驟1:添加依賴 步驟2:配置數據庫連接 …

swift開發,關于應用、頁面、視圖的生命周期

目錄一、應用生命周期&#xff08;App Lifecycle&#xff09;UIKit (AppDelegate)SwiftUI (使用 ScenePhase)二、頁面生命周期&#xff08;ViewController Lifecycle&#xff09;三、視圖生命周期&#xff08;UIView Lifecycle&#xff09;四、SwiftUI 視圖生命周期五、關鍵對比…

借助HarmonyOS SDK,《NBA巔峰對決》實現“分鐘級啟動”到“秒級進場”

《NBA巔峰對決》是由望塵科技推出的國內首個真實還原5V5王朝模式的操作籃球手游&#xff0c;提供流暢操作手感和真實籃球賽場體驗。豐富的玩法在為玩家帶來高質游戲體驗的同時&#xff0c;間接帶來了啟動流程冗長的問題&#xff0c;資源更新階段的等待感尤為突出。 “我們發現&…

HT-LINK ICE:海速芯32Gbps信號調理芯片,40dB補償+國產自主,打破高速互聯瓶頸!

HT-LINK ICE&#xff08;TENX海速芯&#xff09;產品解析與推廣文案一、產品定位HT-LINK ICE是TENX海速芯推出的高速信號調理芯片&#xff0c;專為PCIe 5.0/6.0、USB4、Thunderbolt等超高速接口設計&#xff0c;提供信號完整性增強和時鐘恢復功能&#xff0c;適用于數據中心、A…

深入剖析 ADL:C++ 中的依賴查找機制及其編譯錯誤案例分析

一、ADL 的定義與背景&#xff08;一&#xff09;ADL 的定義ADL&#xff08;Argument-Dependent Lookup&#xff0c;依賴查找&#xff09;是 C 中一種特殊的名稱查找機制&#xff0c;用于在調用函數時&#xff0c;根據函數參數的類型來確定查找的命名空間范圍。ADL 的核心思想是…

【科研繪圖系列】R語言繪制相關系數圖

文章目錄 介紹加載R包數據下載導入數據數據預處理畫圖系統信息參考介紹 【科研繪圖系列】R語言繪制相關系數圖 加載R包 library(vegan) library(dplyr)# install.packages("./RVisulizationData/003.mantel test/ggcor_0.9.8.1.tar.gz", repos = NULL, type = &quo…

pharokka phold--快速噬菌體注釋工具

pharokka是一款專用于噬菌體基因組及宏基因組的快速標準化注釋工具。PS.仍在積極更新中&#xff0c;最近一次更新是在今年6.20。 若需對細菌基因組進行快速標準化注釋&#xff0c;建議使用Bakta。啟發pharokka開發及命名的Prokka也是優秀選擇&#xff0c;但Bakta實為Prokka的卓…

深入淺出 Python Asynchronous I/O:從 asyncio 入門到實戰

在現代軟件開發中&#xff0c;性能是一個永恒的話題。特別是在處理網絡請求、文件讀寫等 I/O 密集型任務時&#xff0c;傳統的同步編程模型可能會因為等待而浪費大量時間。為了解決這個問題&#xff0c;異步編程應運而生。Python 通過內置的 asyncio 庫&#xff0c;為開發者提供…

OpenCV顏色矩哈希算法------cv::img_hash::ColorMomentHash

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 該類實現了顏色矩哈希算法&#xff08;Color Moment Hash&#xff09;&#xff0c;用于圖像相似性比較。它基于圖像在HSV顏色空間中的顏色矩統計特…

上海交大醫學院張維拓老師赴同濟醫院做R語言訓練營培訓

當前&#xff0c;醫學與人工智能的深度融合正迎來歷史性發展機遇。華中科技大學同濟醫學院附屬同濟醫院&#xff08;以下簡稱“同濟醫院”&#xff09;作為醫療人工智能應用的先行探索者&#xff0c;已在電子病歷輔助書寫、科研數據分析、醫療合同自動化審核等關鍵場景完成試點…

使用阿里云/騰訊云安裝完成mysql使用不了

顯示錯誤1130 - Host 106.228.110.117 is not allowed to connect to this MySQL server解決方案進入服務器的mysql命令行mysql -u root -p查看數據庫SHOW DATABASES;選擇mysql數據庫USE mysql;查看里面的表SHOW TABLES;查詢user表格的權限限制SELECT Host, User FROM user;將權…

第35周—————糖尿病預測模型優化探索

目錄 目錄 前言 1.檢查GPU 2.查看數據 ?編輯 3.劃分數據集 4.創建模型與編譯訓練 5.編譯及訓練模型 6.結果可視化 7.總結 前言 &#x1f368; 本文為&#x1f517;365天深度學習訓練營中的學習記錄博客 &#x1f356; 原作者&#xff1a;K同學啊 1.檢查GPU import torch.n…

接口(上篇)

接口&#xff08;上篇&#xff09;1.概念2.語法規則3.使用和特性4.實現多接口5.接口間繼承1.概念 接口就是公共的行為規范標準&#xff0c;大家在實現時&#xff0c; 只要符合規范標準&#xff0c;就可以通用。 在Java中&#xff0c;接口可以看成是&#xff1a;多個類的公共規…

UE5 源碼編譯setup.bat報錯

文章目錄編譯報錯改動說明小結更新編譯報錯 改動說明 因為需要整服務器&#xff0c;就編譯源碼&#xff0c;然后就遇到這個&#xff0c;很無語。這個問題一直存在&#xff0c;UE官方也不修復&#xff0c;也算是修復了&#xff0c;只是每次都要去重新下載替換下。也可以去問問d…

Linux下PCIe子系統(二)——PCIe子系統框架詳解

Linux下PCIe子系統&#xff08;二&#xff09;——PCIe子系統框架詳解 1. 概述 PCIe&#xff08;PCI Express&#xff09;子系統是Linux內核中負責管理PCI/PCIe設備的核心組件。它提供了一套完整的框架來發現、配置和管理PCI設備&#xff0c;實現了設備的即插即用和熱插拔功能。…

[特殊字符] LLM(大型語言模型):智能時代的語言引擎與通用推理基座

本文由「大千AI助手」原創發布&#xff0c;專注用真話講AI&#xff0c;回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我&#xff0c;一起撕掉過度包裝&#xff0c;學習真實的AI技術&#xff01; 從千億參數到人類認知的AI革命 &#x1f50d; 一、核心定義與核心特征…

18-C#改變形參內容

C#改變形參內容 1.ref 參數 int A100; add1(ref A) public int add1 (ref int x) {x x 10;return x; }2.out 參數 int A100; int B200; int Z; add3(A,B, out Z) public int add3 (int x&#xff0c;int y&#xff0c;int z) {z x y;return z; }

恒盾C#混淆加密大師最新版本1.4.0更新 - 增強各類加密效果, 提升兼容性, 使.NET加密更簡單

C#/.NET作為托管語言, 其編譯生成的EXE/DLL極易被反編譯工具還原源碼。據統計&#xff0c;大量的商業軟件曾遭遇過代碼逆向風險&#xff0c;導致核心算法泄露、授權被跳過. 因此對于C#語言開發的.NET程序來說, 在發布前進行混淆和加密非常有必要. 恒盾C#混淆加密大師作為一款.N…

數學建模:非線性規劃:二次規劃問題

一、定義如果規劃模型的目標函數是決策向量的二次函數&#xff0c;約束條件都是線性的&#xff0c;那么這個模型稱為二次規劃&#xff08;QP&#xff09;模型。二次規劃模型的一般形式為二、性質凸性判定準則二次規劃問題的凸性完全由Hessian矩陣H決定&#xff1a;??嚴格凸QP…