从零搭建微服务架构: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中的情况:
-
动态配置: 需要经常变更的配置,例如数据库连接信息、缓存配置、服务端口等,可以放在Nacos中,实现动态更新,无需重启应用。
-
多环境配置: 如果你的应用需要在不同的环境中运行(开发、测试、生产等),可以将环境相关的配置放在Nacos中,通过命名空间或分组来区分。
-
敏感信息: 不希望将敏感信息(如密钥、密码)硬编码到代码中,可以将其存储在Nacos的安全配置中,实现集中管理。
-
微服务架构: 在微服务架构中,服务之间的调用地址、依赖关系等信息可以放在Nacos中,实现服务发现与注册。
直接在properties文件中写配置的情况:
-
静态配置: 不需要经常变更的配置,例如静态资源路径、日志配置等,可以直接写在
properties文件中。 -
默认配置: 对于一些不会变更的默认配置,可以直接写在
properties文件中,避免额外的Nacos配置。 -
简单项目: 对于小型项目或简单应用,不涉及多环境、动态配置等复杂场景时,可以直接将所有配置写在
properties文件中。 -
开发调试: 在开发和调试阶段,为了简化配置,可以将一些临时性的配置直接写在
properties文件中。
总体而言,Nacos的优势在于它提供了动态配置管理的能力,适用于需要频繁变更配置的场景。在实际应用中,你可以根据项目的需求和复杂度,灵活选择将哪些配置放在Nacos中,哪些配置直接写在properties文件中。
相关文章:
从零搭建微服务架构:Spring Boot与Nacos完美整合
🎏:你只管努力,剩下的交给时间 🏠 :小破站 从零搭建微服务架构:Spring Boot与Nacos完美整合 前言第一:服务注册与发现第二:配置中心第三:报错问题解决第四:什…...
原来你不会找资源,三个宝藏白嫖书籍网站,阅读改变生活(一)
[无名图书] - 探索无尽的书海 致力于为你打开一扇通往无限知识和无穷想象的大门。从畅销小说到学术专著,书库涵盖了各个领域,满足了各种阅读胃口。无论你是文学爱好者、学术追求者还是正在寻找新奇刺激的冒险者,这都是你不可错过的阅读伴侣。…...
linux rm文件后空间不释放怎么处理
如题,rm文件后,使用df -h看可用空间,并未增加,这是怎么回事?原来,是有进程在访问这个文件,使用“lsof | grep delete”找到进程并kill掉,此时再看可用空间,便增加了。 我…...
克鲁斯卡尔算法(C++)
目录 克鲁斯卡尔算法 编辑代码: 结果: 克鲁斯卡尔算法 克鲁斯卡尔算法是一种用于求解最小生成树的算法。最小生成树是指一棵包含了所有节点的连通图,并且边的权值之和最小。 克鲁斯卡尔算法的基本思想是,每次选择图中最小的…...
【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电源模块对效率有什么要求? DC电源模块是现代科技中非常重要的组成部分,它是将交流电转换为直流电的装置,可以提供稳定的电源给各种设备和系统使用。效率是DC电源模块的一个关键性能指标,直接影响着模块的整体性能和效…...
Linux在线安装MySQL8.0.24安装、MySQL数据备份和恢复
一、 Linux在线安装MySQL8.0.24 如果机器上已经有MySQL5.7版本需要先卸载 首先,需要停止MySQL服务。可以通过以下命令来停止服务: sudo systemctl stop mysqld接下来,我们需要卸载MySQL5.7。可以通过以下命令来卸载: 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:列出所有数据库use db_name:切换到指定的数据库db.dropDatabase():删除当前数据库db.createCollection("collection_name"):创建集合db.collection_name.insert(document):向指定集合插入数据db.co…...
网络运维Day19
文章目录 环境准备数据备份为什么要备份什么是备份备份到哪里什么时候备份如何备份 完整备份物理备份逻辑备份测试恢复所有库 构建MySQL服务xtrabackup完全备份与恢复完全备份完全恢复增量备份增量恢复 总结 环境准备 IP地址采用自动分配,以自己的为准 可以将之前的…...
颜色标记txt和多根走线【Cadance进阶】
文章目录 前言颜色标记txt多根走线 前言 今天来介绍个基础操作中不常见的,但是非常实用的技巧。第一个是颜色标记,它是与text文件结合,根据text文件中的网络来染色标记的,致力于找出那些特定的走线,或者是查询出现问题…...
你是想被ChatGPT改变,还是改变软件开发的未来?丨IDCF
人工智能技术的发展,正在深刻地改变着我们的生活和工作方式。在软件工程领域,ChatGPT作为一种新兴的人工智能技术,正在逐渐地被应用到软件开发的各个环节中。那么,ChatGPT对每个人的影响是什么呢? 一、对软件开发人员…...
Homography详解在MVSNet中的应用
Homography(单应性变换)是计算机视觉中的一个重要概念,用于描述两个平面之间的透视关系。在图像处理和计算机视觉中,Homography通常表示两个平面之间的投影关系,这种关系可以通过一个3x3的矩阵来表示。 在数学上&…...
linux parted给磁盘分区
概述 通常我们用的比较多的分区工具是fdisk命令,但由于fdisk只支持MBR分区,MBR分区表最大支撑2T的磁盘,所以无法划分大于2T的分区。而parted工具可以划分单个分区大于2T的GPT格式的分区,也可以划分普通的MBR分区。 1.查看磁盘大小…...
大数据毕业设计选题推荐-机房信息大数据平台-Hadoop-Spark-Hive
✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...
使用 PYTORCH 进行图像风格迁移
一、介绍 本教程介绍如何实现 由 Leon A. Gatys、Alexander S. Ecker 和 Matthias Bethge 开发的神经风格算法。神经风格或神经传输允许您拍摄图像并以新的艺术风格再现它。该算法采用三幅图像,即输入图像、内容图像和风格图像,并将输入更改为类似于内容…...
vscode使用flake8设置单行最长字符限制设置失败的问题
vscode使用flake8设置单行最长字符限制设置失败的问题 问题描述解决方案 问题描述 如图所示,使用flake8单行字数过长,就会有有红色底的波浪线 一般情况下很多教程都会让你在setting.json里面设置 但是我打开我的setting.json,发现我已经进…...
SAP KO22内部订单预算BAPI与BDC
KO22可以为内部订单预先维护预算,以便在后续成本实际产生时进行控制。 使用BAPI进行创建:KBPP_EXTERN_UPDATE_CO SAP note 625613中对该BAPI的使用方式有详细介绍,使用时可进行参考。 年度预算:e_gjahr传值、e_ges置空ÿ…...
K8S篇之实现利用Prometheus监控pod的实时数据指标
一、监控部署 1、将k8s集群中kube-state-metrics指标进行收集,服务进行部署 1.1 pod性能指标(k8s集群组件自动集成) k8s组件本身提供组件自身运行的监控指标以及容器相关的监控指标。通过cAdvisor 是一个开源的分析容器资源使用率和性能特性的…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
