当前位置: 首页 > 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 是一个开源的分析容器资源使用率和性能特性的…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

RushDB开源程序 是现代应用程序和 AI 的即时数据库。建立在 Neo4j 之上

一、软件介绍 文末提供程序和源码下载 RushDB 改变了您处理图形数据的方式 — 不需要 Schema&#xff0c;不需要复杂的查询&#xff0c;只需推送数据即可。 二、Key Features ✨ 主要特点 Instant Setup: Be productive in seconds, not days 即时设置 &#xff1a;在几秒钟…...

Cursor AI 账号纯净度维护与高效注册指南

Cursor AI 账号纯净度维护与高效注册指南&#xff1a;解决限制问题的实战方案 风车无限免费邮箱系统网页端使用说明|快速获取邮箱|cursor|windsurf|augment 问题背景 在成功解决 Cursor 环境配置问题后&#xff0c;许多开发者仍面临账号纯净度不足导致的限制问题。无论使用 16…...