当前位置: 首页 > news >正文

从零搭建微服务架构:Spring Boot与Nacos完美整合

🎏:你只管努力,剩下的交给时间

🏠 :小破站

从零搭建微服务架构:Spring Boot与Nacos完美整合

  • 前言
  • 第一:服务注册与发现
  • 第二:配置中心
  • 第三:报错问题解决
  • 第四:什么配置该存入nacos中
    • 将配置放在Nacos中的情况:
    • 直接在`properties`文件中写配置的情况:

前言

微服务架构的崛起为开发者提供了更灵活、可维护的解决方案。然而,随之而来的挑战是如何管理和维护这些分散的服务。在本文中,我们将探索如何利用Spring Boot和Nacos,两个强大的开源框架,为你的微服务应用构建一个高效的基础设施。

注意:版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本。

第一:服务注册与发现

1️⃣:maven坐标实现

<dependency><groupId>com.alibaba.boot</groupId><artifactId>nacos-discovery-spring-boot-starter</artifactId><version>0.2.12</version>
</dependency>

2️⃣:properties配置

# 这里配置的是Nacos服务端的地址和端口。默认情况下,Nacos的服务端地址是127.0.0.1,端口是8848,而不是8748。请确保使用正确的端口。
nacos.discovery.server-addr=127.0.0.1:8748
# 如果你使用了Namespace,确保Namespace的ID是正确的。在你的Nacos控制台中查看Namespace的ID,并将其配置到nacos.discovery.namespace属性中。
nacos.discovery.namespace=8afda2b0-5b6c-4839-9bb5-ee9db41fae1e
# 这个配置是用来控制是否自动注册服务到Nacos的。如果设置为true,你的服务启动后会自动注册到Nacos中心。确保这个配置项符合你的需求。
nacos.discovery.auto-register=true

3️⃣:设置监听以及自动注册配置

package com.todoitbo.baseSpringbootDasmart.config;import com.alibaba.nacos.api.annotation.NacosInjected;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;import javax.annotation.PostConstruct;
import java.util.List;/*** @author xiaobo*/
@Configuration
public class NacosRegisterConfig {// 服务名称@Value("${spring.application.name}")private String applicationName;// 服务的端口号@Value("${server.port}")private Integer port;// 服务ip地址@Value("${server.ip}")private String ip;@NacosInjectedprivate NamingService namingService;// @PostConstruct 在依赖注入完成时执行注解的方法@PostConstructpublic void register() throws NacosException {// 注册服务namingService.registerInstance(applicationName, ip, port);// 监听实现try {List<Instance> instances = namingService.getAllInstances(applicationName);System.out.println("Initial service instances: " + instances);// You can implement your logic to handle service instance changes here} catch (Exception e) {e.printStackTrace();}}}

🔚:成功示意图

在这里插入图片描述

第二:配置中心

1️⃣:maven坐标

<dependency><groupId>com.alibaba.boot</groupId><artifactId>nacos-config-spring-boot-starter</artifactId><version>0.2.12</version>
</dependency>

2️⃣:properties编写

nacos.config.server-addr=127.0.0.1:7748
nacos.config.namespace=8afda2b0-5b6c-4839-9bb5-ee9db41fae1e
nacos.config.data-id=springboot-bo
# 该属性定义了配置的类型。在这里,它设置为 properties,表示配置以属性文件的形式存在。
nacos.config.type=properties
# 当设置为 true 时,该属性在应用程序的引导阶段启用 Nacos 作为配置源。通常用于在主应用程序上下文创建之前加载配置属性。
nacos.config.bootstrap.enable=true
# 当设置为 true 时,该属性启用远程配置同步。这意味着应用程序将从 Nacos 服务器获取其配置。
nacos.config.enable-remote-sync-config=true

3️⃣:获取配置

@Value("${test.name}")
private String testName;@NacosInjected
private ConfigService configService;@GetMapping("/testNacos")
public String testNacos() throws NacosException {String defaultGroup = configService.getConfig(dataId, "DEFAULT_GROUP", 5000);return defaultGroup + "-------->" + testName;
}

🔚:成功示意图

在这里插入图片描述

上面演示了可以直接读取nacos中的配置,并且可以使用@Value直接拿到配置中的值

第三:报错问题解决

Client not connected, current status:STARTING

第四:什么配置该存入nacos中

决定将哪些配置放在Nacos中,而将哪些配置直接写在properties文件中,通常依赖于你的具体需求和项目的架构。以下是一些一般性的建议:

将配置放在Nacos中的情况:

  1. 动态配置: 需要经常变更的配置,例如数据库连接信息、缓存配置、服务端口等,可以放在Nacos中,实现动态更新,无需重启应用。

  2. 多环境配置: 如果你的应用需要在不同的环境中运行(开发、测试、生产等),可以将环境相关的配置放在Nacos中,通过命名空间或分组来区分。

  3. 敏感信息: 不希望将敏感信息(如密钥、密码)硬编码到代码中,可以将其存储在Nacos的安全配置中,实现集中管理。

  4. 微服务架构: 在微服务架构中,服务之间的调用地址、依赖关系等信息可以放在Nacos中,实现服务发现与注册。

直接在properties文件中写配置的情况:

  1. 静态配置: 不需要经常变更的配置,例如静态资源路径、日志配置等,可以直接写在properties文件中。

  2. 默认配置: 对于一些不会变更的默认配置,可以直接写在properties文件中,避免额外的Nacos配置。

  3. 简单项目: 对于小型项目或简单应用,不涉及多环境、动态配置等复杂场景时,可以直接将所有配置写在properties文件中。

  4. 开发调试: 在开发和调试阶段,为了简化配置,可以将一些临时性的配置直接写在properties文件中。

总体而言,Nacos的优势在于它提供了动态配置管理的能力,适用于需要频繁变更配置的场景。在实际应用中,你可以根据项目的需求和复杂度,灵活选择将哪些配置放在Nacos中,哪些配置直接写在properties文件中。

相关文章:

从零搭建微服务架构:Spring Boot与Nacos完美整合

&#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 从零搭建微服务架构&#xff1a;Spring Boot与Nacos完美整合 前言第一&#xff1a;服务注册与发现第二&#xff1a;配置中心第三&#xff1a;报错问题解决第四&#xff1a;什…...

原来你不会找资源,三个宝藏白嫖书籍网站,阅读改变生活(一)

[无名图书] - 探索无尽的书海 致力于为你打开一扇通往无限知识和无穷想象的大门。从畅销小说到学术专著&#xff0c;书库涵盖了各个领域&#xff0c;满足了各种阅读胃口。无论你是文学爱好者、学术追求者还是正在寻找新奇刺激的冒险者&#xff0c;这都是你不可错过的阅读伴侣。…...

linux rm文件后空间不释放怎么处理

如题&#xff0c;rm文件后&#xff0c;使用df -h看可用空间&#xff0c;并未增加&#xff0c;这是怎么回事&#xff1f;原来&#xff0c;是有进程在访问这个文件&#xff0c;使用“lsof | grep delete”找到进程并kill掉&#xff0c;此时再看可用空间&#xff0c;便增加了。 我…...

vue中el-tree树形组件利用filter和 filterNode方法实现模糊搜索

具体详情可见...

克鲁斯卡尔算法(C++)

目录 克鲁斯卡尔算法 ​编辑代码&#xff1a; 结果&#xff1a; 克鲁斯卡尔算法 克鲁斯卡尔算法是一种用于求解最小生成树的算法。最小生成树是指一棵包含了所有节点的连通图&#xff0c;并且边的权值之和最小。 克鲁斯卡尔算法的基本思想是&#xff0c;每次选择图中最小的…...

【Shell脚本 4】测试用

#!/usr/bin/env bash ​ # --------------------------------------------------------------------------------- # 控制台颜色 BLACK"\033[1;30m" RED"\033[1;31m" GREEN"\033[1;32m" YELLOW"\033[1;33m" BLUE"\033[1;34m"…...

DC电源模块对效率有什么要求?

BOSHIDA DC电源模块对效率有什么要求&#xff1f; DC电源模块是现代科技中非常重要的组成部分&#xff0c;它是将交流电转换为直流电的装置&#xff0c;可以提供稳定的电源给各种设备和系统使用。效率是DC电源模块的一个关键性能指标&#xff0c;直接影响着模块的整体性能和效…...

Linux在线安装MySQL8.0.24安装、MySQL数据备份和恢复

一、 Linux在线安装MySQL8.0.24 如果机器上已经有MySQL5.7版本需要先卸载 首先&#xff0c;需要停止MySQL服务。可以通过以下命令来停止服务&#xff1a; sudo systemctl stop mysqld接下来&#xff0c;我们需要卸载MySQL5.7。可以通过以下命令来卸载&#xff1a; sudo yum…...

【python】OpenCV—Rectangle, Circle, Selective Search(1.2)

文章目录 1 画框画圈1.1 画矩形框1.2 画圆 / 点1.3 椭圆 2 Selective Search3 Resize 1 画框画圈 1.1 画矩形框 # Copy the image img_rgb_copy img_rgb.copy()# Draw a rectangle cv2.rectangle(img_rgb_copy, pt1 (405, 90), pt2 (740, 510),color (255, 0, 0), thickne…...

MongoDB是一个NoSQL数据库,有着多种不同的命令和操作。以下是一些常见的MongoDB命令:

show dbs&#xff1a;列出所有数据库use db_name&#xff1a;切换到指定的数据库db.dropDatabase()&#xff1a;删除当前数据库db.createCollection("collection_name")&#xff1a;创建集合db.collection_name.insert(document)&#xff1a;向指定集合插入数据db.co…...

网络运维Day19

文章目录 环境准备数据备份为什么要备份什么是备份备份到哪里什么时候备份如何备份 完整备份物理备份逻辑备份测试恢复所有库 构建MySQL服务xtrabackup完全备份与恢复完全备份完全恢复增量备份增量恢复 总结 环境准备 IP地址采用自动分配&#xff0c;以自己的为准 可以将之前的…...

颜色标记txt和多根走线【Cadance进阶】

文章目录 前言颜色标记txt多根走线 前言 今天来介绍个基础操作中不常见的&#xff0c;但是非常实用的技巧。第一个是颜色标记&#xff0c;它是与text文件结合&#xff0c;根据text文件中的网络来染色标记的&#xff0c;致力于找出那些特定的走线&#xff0c;或者是查询出现问题…...

你是想被ChatGPT改变,还是改变软件开发的未来?丨IDCF

人工智能技术的发展&#xff0c;正在深刻地改变着我们的生活和工作方式。在软件工程领域&#xff0c;ChatGPT作为一种新兴的人工智能技术&#xff0c;正在逐渐地被应用到软件开发的各个环节中。那么&#xff0c;ChatGPT对每个人的影响是什么呢&#xff1f; 一、对软件开发人员…...

Homography详解在MVSNet中的应用

Homography&#xff08;单应性变换&#xff09;是计算机视觉中的一个重要概念&#xff0c;用于描述两个平面之间的透视关系。在图像处理和计算机视觉中&#xff0c;Homography通常表示两个平面之间的投影关系&#xff0c;这种关系可以通过一个3x3的矩阵来表示。 在数学上&…...

linux parted给磁盘分区

概述 通常我们用的比较多的分区工具是fdisk命令&#xff0c;但由于fdisk只支持MBR分区&#xff0c;MBR分区表最大支撑2T的磁盘&#xff0c;所以无法划分大于2T的分区。而parted工具可以划分单个分区大于2T的GPT格式的分区&#xff0c;也可以划分普通的MBR分区。 1.查看磁盘大小…...

大数据毕业设计选题推荐-机房信息大数据平台-Hadoop-Spark-Hive

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...

使用 PYTORCH 进行图像风格迁移

一、介绍 本教程介绍如何实现 由 Leon A. Gatys、Alexander S. Ecker 和 Matthias Bethge 开发的神经风格算法。神经风格或神经传输允许您拍摄图像并以新的艺术风格再现它。该算法采用三幅图像&#xff0c;即输入图像、内容图像和风格图像&#xff0c;并将输入更改为类似于内容…...

vscode使用flake8设置单行最长字符限制设置失败的问题

vscode使用flake8设置单行最长字符限制设置失败的问题 问题描述解决方案 问题描述 如图所示&#xff0c;使用flake8单行字数过长&#xff0c;就会有有红色底的波浪线 一般情况下很多教程都会让你在setting.json里面设置 但是我打开我的setting.json&#xff0c;发现我已经进…...

SAP KO22内部订单预算BAPI与BDC

KO22可以为内部订单预先维护预算&#xff0c;以便在后续成本实际产生时进行控制。 使用BAPI进行创建&#xff1a;KBPP_EXTERN_UPDATE_CO SAP note 625613中对该BAPI的使用方式有详细介绍&#xff0c;使用时可进行参考。 年度预算&#xff1a;e_gjahr传值、e_ges置空&#xff…...

K8S篇之实现利用Prometheus监控pod的实时数据指标

一、监控部署 1、将k8s集群中kube-state-metrics指标进行收集&#xff0c;服务进行部署 1.1 pod性能指标&#xff08;k8s集群组件自动集成&#xff09; k8s组件本身提供组件自身运行的监控指标以及容器相关的监控指标。通过cAdvisor 是一个开源的分析容器资源使用率和性能特性的…...

UE动画师避坑指南:状态机(State Machine)乱成一团麻?试试这3个整理技巧和最佳实践

UE动画师高效工作指南&#xff1a;状态机结构化管理的3个核心策略当项目进入中后期开发阶段&#xff0c;动画蓝图的状态机往往会变成一团纠缠不清的"意大利面条"。每次添加新功能都像是在已经混乱的线团上再打一个结&#xff0c;最终导致团队协作效率直线下降。我曾参…...

工业智能化的时序选型指南:当数据底座遇见机器学习

随着工业 4.0 和物联网的深入发展&#xff0c;企业对时序数据的诉求已经发生了质的改变&#xff1a;“仅仅把海量数据存下来&#xff0c;并在大屏上画成折线图”已经远远无法满足高阶的业务需求。风机设备的预测性维护、流水线能耗的异常检测、智能电网的产量预测……这些高价值…...

Java + Spring Boot 操作 Kafka 完整学习指南

前置条件&#xff1a;ZooKeeper 集群 Kafka 集群已启动&#xff08;3个ZK节点 3个Broker&#xff09; Broker 地址&#xff1a;172.17.0.7:9092, 172.17.0.7:9093, 172.17.0.7:9094第一阶段&#xff1a;原生 Java API 操作 Kafka目的&#xff1a;理解底层原理&#xff0c;Spr…...

DeFecT-FF:机器学习力场加速半导体缺陷高通量筛选与建模

1. 项目概述&#xff1a;当机器学习力场遇上缺陷物理在薄膜太阳能电池&#xff0c;尤其是CdSeTe这类II-VI族半导体材料的研究中&#xff0c;有一个核心问题长期困扰着材料科学家和器件工程师&#xff1a;缺陷。这些原子尺度上的“不完美”——比如一个缺失的镉原子&#xff08;…...

LLM提示压缩技术:原理、实现与优化实践

1. 提示压缩技术概述在大型语言模型&#xff08;LLM&#xff09;应用中&#xff0c;推理延迟已成为关键瓶颈。当处理包含多个检索段落的RAG&#xff08;检索增强生成&#xff09;系统时&#xff0c;长上下文会导致提示&#xff08;prompt&#xff09;体积膨胀&#xff0c;显著增…...

量子计算误差缓解技术:从原理到实践

1. 量子计算误差缓解技术概述量子计算正从实验室走向实际应用&#xff0c;但噪声问题始终是制约其发展的关键瓶颈。在NISQ&#xff08;噪声中等规模量子&#xff09;时代&#xff0c;量子比特数量虽已突破百位大关&#xff0c;但错误率仍居高不下。误差缓解技术&#xff08;Err…...

AI 术语通俗词典:RAG

RAG 是大语言模型、自然语言处理、知识问答、智能客服、企业知识库和 AI 应用开发中非常重要的一个术语&#xff0c;全称是 Retrieval-Augmented Generation&#xff0c;通常翻译为“检索增强生成”。它用来描述一种让大语言模型先从外部资料中检索相关内容&#xff0c;再基于这…...

2026年AI写作辅助软件实测排行,哪款真正适合写论文?

2026 年学术 AI 论文工具已形成全流程、理工 / 社科、英文 / 中文、免费 / 付费的清晰分化。综合实测排行与场景适配&#xff0c;千笔AI 是中文全能首选&#xff0c;DeepSeek 学术版是理工开源首选&#xff0c;毕业之家是国内毕业专属首选。 一、2026 年实测排行 TOP5&#xff…...

Windows和Office一键激活终极指南:KMS_VL_ALL_AIO智能脚本完全解析

Windows和Office一键激活终极指南&#xff1a;KMS_VL_ALL_AIO智能脚本完全解析 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活和Office办公软件激活而烦恼吗&#xff1f;…...

Claude Code 基础配置篇-三层配置体系详解

基础配置篇 —— Rules、Memory、Custom Instructions 三层配置体系详解系列导读&#xff1a; Claude Code 最让新手头疼的问题是"每次写的代码风格都不一样"、“总要重新解释项目架构”。本篇将彻底解决这个问题。通过建立三层配置体系&#xff0c;你可以让 Claude …...