Spring Boot 整合 Nacos 實戰教程:服務注冊發現與配置中心詳解

Spring Boot 整合 Nacos 教程(3000字)

一、Nacos 簡介

Nacos 是阿里巴巴開源的一個動態服務發現、配置管理和服務管理平臺,致力于幫助開發者更輕松地構建云原生應用。它支持多種注冊中心協議(如 Dubbo、Spring Cloud、Kubernetes 等),并提供統一的配置中心功能。

Nacos 的核心功能包括:

  • 服務注冊與發現:支持服務的自動注冊與健康檢查,便于實現服務治理。
  • 配置中心:支持配置的集中管理與動態更新,避免配置文件的重復維護。
  • 服務管理:提供服務的元數據管理、權重調整、流量控制等能力。

更多請看文章 《Windows環境下Nacos安裝與部署全攻略:從零開始的詳細教程》

二、開發環境準備

1. 安裝 Nacos Server

你可以選擇本地安裝或者使用 Docker 安裝 Nacos。

本地安裝步驟:
  1. 下載 Nacos Server:https://github.com/alibaba/nacos/releases
  2. 解壓后進入 bin 目錄。
  3. 啟動單機模式:
# Windows
startup.cmd -m standalone# Linux / Mac
sh startup.sh -m standalone
  1. 訪問 Nacos 控制臺:http://localhost:8848/nacos,默認賬號密碼為 nacos/nacos
Docker 安裝方式:
docker run -d -p 8848:8848 -p 9848:9848 nacos/nacos-server:latest

2. 創建 Spring Boot 工程

使用 Spring Initializr 或 IDE 創建 Spring Boot 項目,添加以下依賴:

  • Spring Web
  • Spring Cloud Alibaba Nacos Discovery
  • Spring Cloud Alibaba Nacos Config

Maven 依賴如下:

<dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2022.0.0.0</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><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>
</dependencies>

三、Spring Boot 整合 Nacos 服務注冊與發現

1. 配置 Nacos 服務發現

application.yml 中添加以下配置:

server:port: 8080spring:application:name: nacos-service-providercloud:nacos:discovery:server-addr: localhost:8848

2. 啟用服務注冊發現功能

在啟動類上添加 @EnableDiscoveryClient 注解:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication
@EnableDiscoveryClient
public class NacosServiceProviderApplication {public static void main(String[] args) {SpringApplication.run(NacosServiceProviderApplication.class, args);}
}

3. 啟動服務并查看注冊情況

啟動服務后,訪問 Nacos 控制臺 http://localhost:8848/nacos,在“服務管理” -> “服務列表”中可以看到服務已注冊。

4. 創建服務消費者

創建一個消費者服務,同樣配置 Nacos 注冊中心:

server:port: 8081spring:application:name: nacos-service-consumercloud:nacos:discovery:server-addr: localhost:8848

啟用服務發現:

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

注入 RestTemplate 并調用服務提供者:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;@RestController
public class ConsumerController {@Autowiredprivate RestTemplate restTemplate;@GetMapping("/call")public String callProvider() {String url = "http://nacos-service-provider/hello";return restTemplate.getForObject(url, String.class);}@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}
}

確保服務提供者有 /hello 接口:

@RestController
public class ProviderController {@GetMapping("/hello")public String sayHello() {return "Hello from provider!";}
}

四、Spring Boot 整合 Nacos 配置中心

1. 創建配置文件

登錄 Nacos 控制臺,進入“配置管理” -> “配置列表”,點擊“+”號新增配置:

  • Data ID:nacos-service-provider.properties
  • Group:DEFAULT_GROUP
  • 配置內容:
user.config=hello nacos config

2. 配置 Spring Boot 使用 Nacos 配置中心

bootstrap.yml 中添加配置:

spring:application:name: nacos-service-providercloud:nacos:config:server-addr: localhost:8848file-extension: properties

bootstrap.yml 是在 Spring Boot 啟動前加載的配置文件,用于連接配置中心。

3. 在 Spring Boot 中讀取配置

創建一個配置類:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Component
public class MyConfig {@Value("${user.config}")private String userConfig;public String getUserConfig() {return userConfig;}
}

創建一個控制器來展示配置內容:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ConfigController {private final MyConfig myConfig;public ConfigController(MyConfig myConfig) {this.myConfig = myConfig;}@GetMapping("/config")public String getConfig() {return myConfig.getUserConfig();}
}

訪問 /config 接口即可看到從 Nacos 獲取的配置值。

4. 動態刷新配置(可選)

如果你希望在不重啟服務的情況下更新配置,可以添加 @RefreshScope 注解:

import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;@Component
@RefreshScope
public class MyConfig {// ...
}

五、Nacos 多環境配置管理(開發/測試/生產)

在實際項目中,我們通常需要區分不同的環境(dev、test、prod)。

1. 在 Nacos 中創建不同環境的配置文件

例如:

  • Data ID:nacos-service-provider.properties
    • Group:DEV_GROUP
  • Data ID:nacos-service-provider.properties
    • Group:TEST_GROUP
  • Data ID:nacos-service-provider.properties
    • Group:PROD_GROUP

2. 在 bootstrap.yml 中切換環境

spring:application:name: nacos-service-providercloud:nacos:config:server-addr: localhost:8848file-extension: propertiesgroup: DEV_GROUP

通過修改 group 屬性切換不同環境的配置。

六、Nacos 共享配置與命名空間管理

1. 共享配置

如果你有多個微服務共享某些配置(如數據庫配置),可以創建一個共享配置文件,如:

  • Data ID:shared-config.properties
  • Group:SHARED_GROUP

在 Spring Boot 中引入:

spring:cloud:nacos:config:server-addr: localhost:8848file-extension: propertiesextension-configs:- data-id: shared-config.propertiesgroup: SHARED_GROUPrefresh: true

2. 命名空間隔離

Nacos 支持多租戶管理,通過命名空間(Namespace)隔離不同環境或組織的配置與服務。

獲取命名空間 ID:

  1. 登錄 Nacos 控制臺。
  2. 進入“命名空間”頁面。
  3. 新建或查看已有命名空間的 ID。

bootstrap.yml 中配置命名空間:

spring:cloud:nacos:config:namespace: your-namespace-idserver-addr: localhost:8848file-extension: properties

七、Nacos 服務元數據與權重管理

1. 添加服務元數據

application.yml 中添加:

spring:cloud:nacos:discovery:server-addr: localhost:8848metadata:version: 1.0region: beijing

在 Nacos 控制臺的服務詳情頁可以查看元數據信息。

2. 調整服務權重

在 Nacos 控制臺中,可以為不同實例設置不同的權重,用于控制流量分配。

八、Nacos 集群部署與高可用

在生產環境中,建議使用 Nacos 集群部署,以保證高可用性。

1. 部署多個 Nacos 節點

準備三臺服務器,分別部署 Nacos,并配置集群模式。

2. 修改配置文件

在每臺服務器的 application.properties 中配置集群地址:

nacos.cluster.servers=ip1:port1,ip2:port2,ip3:port3

3. 使用 MySQL 持久化數據

Nacos 默認使用嵌入式數據庫存儲數據,不適合生產環境。可以通過配置 MySQL 實現數據持久化。

  1. 創建數據庫和表。
  2. 修改 application.properties
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=123456

九、常見問題與解決方案

1. 服務未注冊成功

  • 檢查 Nacos 服務是否啟動。
  • 檢查 server-addr 配置是否正確。
  • 查看 Spring Boot 日志是否有異常。

2. 配置無法加載

  • 檢查 Data ID、Group 是否匹配。
  • 查看 bootstrap.yml 是否正確。
  • 檢查 Nacos 控制臺中的配置是否發布。

3. 動態配置不生效

  • 確保類上添加了 @RefreshScope 注解。
  • 檢查是否引入了 spring-cloud-starter-config 依賴。

十、總結

本文詳細介紹了 Spring Boot 如何整合 Nacos,包括服務注冊與發現、配置中心、多環境管理、共享配置、命名空間、集群部署等內容。通過 Nacos,可以大大簡化微服務架構下的服務治理與配置管理,提升開發效率與系統穩定性。

隨著云原生的發展,Nacos 作為 Spring Cloud Alibaba 的核心組件之一,已經成為構建現代微服務系統的重要工具。建議在實際項目中結合 Spring Cloud Gateway、Sentinel、Seata 等組件,構建完整的微服務解決方案。

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

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

相關文章

VMware 虛擬機裝 Linux Centos 7.9 保姆級教程(附資源包)

安裝 VMware 17.5.1 centos 7.9 ? 1、下載資源包&#xff08;虛擬機鏡像&#xff09; VMware-17.5.1 安裝包秘鑰.zipLinux Centos 7.9 鏡像 2、centos 7.9 下載地址 1、Centos 官網 2、阿里巴巴鏡像站 3、查看網絡命令 ifconfig 或 ip addr 4、登陸服務器 ssh stark192.168.3…

STM32超聲波模塊

一&#xff1a;超聲波模塊1&#xff1a;工作原理采用IO觸發測距&#xff0c;給至少10us的高電平信號。 模塊自動發送8個40KHz的方波&#xff0c;自動檢測是否有信號返回。 有信號返回&#xff0c;通過IO輸出一高電平&#xff0c;高電平持續時間就是超聲波從發射到返回的時間聲波…

RK3568項目(十一)--linux驅動開發之mipi屏幕調試

目錄 一、引言 二、MIPI DSI 屏幕 ------>2.1、MIPI聯盟 ------------>2.1.1、多媒體部分 ------------>2.1.2、硬件協議 ------------>2.1.3、D-PHY功能模式及速率 ------------>2.1.4、分辨率計算 ------>2.2、MIPI-DSI硬件連接 ------>2.3、傳…

C語言小游戲——飛機大戰

目錄 引言 開發環境與工具準備 1. 開發環境配置 2. 資源文件準備 游戲設計與架構 1. 游戲核心數據結構 2. 游戲全局變量 游戲核心功能實現 1. 游戲初始化 2. 游戲主循環 3. 游戲渲染 4. 游戲狀態更新 關鍵游戲機制實現 1. 敵機生成系統 2. 碰撞檢測系統 3. 敵機…

SQLite的可視化界面軟件的安裝

1、如下圖所示&#xff0c;DB Browser軟件&#xff0c;在壓縮包中。2、首先解壓到一個文件夾中。例如&#xff08;D:\\DB Browser&#xff09;文件夾。解壓后的內容如下圖。3、將解壓后的DB Browser文件夾&#xff0c;剪切到D:\Program Files\目錄中。如下兩圖。win10操作系統下…

基于 STM32H743VIT6 的邊緣 AI 實踐:貓咪叫聲分類 CNN 網絡部署實戰(已驗證)中一些bug總結

前言前面發了一篇文章基于 STM32H743VIT6 的邊緣 AI 實踐&#xff1a;貓咪叫聲分類 CNN 網絡部署實戰&#xff08;已驗證&#xff09;。這里面有一些我遇到過的bug&#xff0c;當時基本都花了很長的時間才解決。這里將這些bug總結一下方便后續查閱。1.使用cubemx插件解析AI模型…

【機器學習】突破分類瓶頸:用邏輯回歸與Softmax回歸解鎖多分類世界

&#x1f497;&#x1f497;&#x1f497;歡迎來到我的博客&#xff0c;你將找到有關如何使用技術解決問題的文章&#xff0c;也會找到某個技術的學習路線。無論你是何種職業&#xff0c;我都希望我的博客對你有所幫助。最后不要忘記訂閱我的博客以獲取最新文章&#xff0c;也歡…

Android gradle plugin agp8.6.1發布時間

Android gradle plugin agp8.6.1發布時間 Android Gradle Plugin (AGP) 的版本 8.6.1 是在2023年發布的。具體來說&#xff0c;它是在2023年4月發布的。這個版本的更新包括了多個重要的改進和修復&#xff0c;旨在提升開發者在Android開發過程中的體驗和效率。 主要更新包括&am…

閉包的兩種設計模式

閉包設計模式 概述 閉包是 JavaScript 中的一個重要概念&#xff0c;它允許內層函數訪問外層函數的變量。在實際開發中&#xff0c;閉包經常被用于實現特定的設計模式&#xff0c;主要包括輔助函數模式和工廠模式。 1. 輔助函數模式&#xff08;Helper Function Pattern&#x…

力扣119:楊輝三角Ⅱ

力扣119:楊輝三角Ⅱ題目思路代碼題目 給定一個非負索引 rowIndex&#xff0c;返回「楊輝三角」的第 rowIndex 行。 思路 楊輝三角的規律&#xff1a; 第n行有n1個數&#xff0c;n從0開始每行的第一個數和最后一個數都是1。除了第一行的數其他的數都是由它左上角和右上角的…

@Linux自建證書 Nginx+HTTPS

文章目錄Linux自建證書并配置Nginx HTTPS1. 準備工作2. 安裝必要的工具3. 自建證書腳本3.1 創建CA根證書&#xff08;可選&#xff0c;用于自簽名證書鏈&#xff09;3.2 創建服務器證書腳本4. 證書文件說明5. 配置Nginx使用HTTPS5.1 創建證書存放目錄5.2 配置Nginx站點5.3 啟用…

解決 RAGFlow報錯 `peewee.OperationalError: (1045)`:MySQL 容器密碼錯誤排查手記

文章目錄 ????♂? 深度排查過程 ?? 完美解決方案:同步真實密碼 ? 驗證結果 ?? 經驗總結與最佳實踐 問題現象: 部署 ragflow 時遭遇以下錯誤,且訪問前端頁面無響應: peewee.OperationalError: (1045, "Access denied for user root@192.168.48.6")關鍵線…

lwIP WebSocket 客戶端 TCP PCB 泄漏問題分析與解決

在嵌入式開發中&#xff0c;使用 lwIP 實現 WebSocket 客戶端時&#xff0c;偶爾會遇到反復連接導致 TCP PCB&#xff08;Protocol Control Block&#xff09;泄漏&#xff0c;最終連接數達到上限&#xff08;如 4&#xff09;后無法再建立新連接的問題。本文將結合實際案例&am…

k8s之Attach 和 Mount

Attach 和 Mount 一、核心概念對比操作Attach&#xff08;掛載設備&#xff09;Mount&#xff08;掛載文件系統&#xff09;定義將存儲卷&#xff08;如 EBS、NFS 等&#xff09;連接到宿主機將已 Attach 的存儲設備映射為宿主機上的文件系統路徑執行者云提供商驅動&#xff08…

API Gateway HTTP API 控制客戶端訪問 IP 源

前言 在 API Gateway REST API 中我們可以配置 Resource policy 來實現對特定客戶端 IP 地址的限制. 然而 HTTP API 并不提供這個功能, 不過我們可以用 Lambda 搓一個 Authorizer 實現等效的功能. 創建 Lambda authorizer import json import os import ipaddressdef lambda…

Linux搭建LAMP環境(CentOS 7 與 Ubuntu 雙系統教程)

Linux搭建LAMP環境 一、LAMP 環境核心概念 定義&#xff1a;由 Linux、Apache、MySQL、PHP 四大組件組成的開源 Web 應用平臺本質&#xff1a;四個獨立開源軟件的組合體&#xff0c;因長期協同使用形成高度兼容性&#xff0c;成為動態網站和服務器的主流解決方案 二、LAMP 四大…

c# 開機自動啟動程序

以下是兩種實現C#軟件開機自啟動的常用方法&#xff0c;根據需求選擇適合的方案&#xff1a; 方法1&#xff1a;通過注冊表實現&#xff08;需管理員權限&#xff09; using Microsoft.Win32; using System.Diagnostics;public static class AutoStartManager {/// <summa…

C語言---動態內存管理

為什么要有動態內存分配我們在學習動態內存管理之前&#xff0c;一直都是通過開辟變量&#xff0c;或者是開辟數組的方式來在內存的棧區開辟空間的&#xff0c;但是這樣的開辟方式有局限性&#xff0c;因為一旦開辟之后&#xff0c;它們的大小就無法改變&#xff0c;就缺少了很…

C++標準庫(std)詳解

C標準庫&#xff08;std&#xff09;詳解——目錄C標準庫&#xff08;std&#xff09;詳解一、命名空間&#xff08;namespace&#xff09;二、主要組件1. 輸入輸出流&#xff08;<iostream>&#xff09;2. 字符串處理&#xff08;<string>&#xff09;3. STL容器&…

ESP32的OTA升級詳解:3. 搭建node/python服務器升級(native ota原生API)

一、OTA兩種方式&#xff1a;app_update 與 esp_https_ota 區別 ESP32/ESP32-S2/ESP32-C3等可通過Wi-Fi或以太網下載新固件到OTA分區實現運行時升級。ESP-IDF提供兩種OTA升級方法&#xff1a; 使用app_update組件的原生API使用esp_https_ota組件的簡化API(支持HTTPS升級) 本次…