从零搭建微服务架构: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;
    @NacosInjected
    private NamingService namingService;

    // @PostConstruct 在依赖注入完成时执行注解的方法
    @PostConstruct
    public 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文件中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/150914.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Solidity案例详解(四)投票智能合约

该合约为原创合约&#xff0c;功能要求如下 在⼀定时间能进⾏投票超过时间投票截⽌&#xff0c;并投赞同票超过50%则为通过。 使⽤safeMath库&#xff0c;使⽤Owner 第三⽅库拥有参与投票权的⽤户在创建合约时确定Voter 结构 要有时间戳、投票是否同意等&#xff1b;struct 结构…

MATLAB中uiresume函数用法

目录 语法 说明 示例 按下按钮后恢复执行 使用函数调用恢复执行 uiresume函数的功能是恢复暂停程序的执行。 语法 uiresume uiresume(f) 说明 uiresume 恢复与当前图窗 (gcf) 关联的对应 uiwait 调用暂停的程序执行。 uiresume(f) 恢复与图窗 f 关联的对应 uiwait 调用…

PbootCMS 应用快速迁移至浪潮信息 KeyarchOS 云服务器

本文我们以 PbootCMS 应用为例&#xff0c;详细介绍如何使用 X2Keyarch 迁移工具将其从 CentOS 系统迁移到浪潮信息 KeyarchOS 系统。 背景介绍 众所周知&#xff0c;CentOS 是最流行的红帽克隆版&#xff0c;因为免费&#xff0c;所以它的安装量甚至比红帽本身要大得多。本来…

人工智能如何重塑体验为先的汽车行业

面向汽车行业用户体验的 AI 人工智能的影响力继续在各个主要行业中迅速蔓延&#xff0c;全球各地的公司都开始大力投资 AI 技术&#xff0c;以提高自身的竞争优势。未来的趋势表明&#xff0c;企业如果不立即采用人工智能战略&#xff0c;就可能会远远落后于竞争对手。 AI 和…

边缘智能网关:新能源时代的数据守护者

一、新能源时代的挑战与机遇 随着全球气候变化和环境问题日益严重&#xff0c;新能源的开发利用成为了世界各国共同关注的焦点。新能源的发展不仅有助于减少对化石能源的依赖&#xff0c;降低温室气体排放&#xff0c;还能带动经济的可持续发展。然而&#xff0c;新能源的普及和…

【云栖2023】姜伟华:Hologres Serverless之路——揭秘弹性计算组

本文根据2023云栖大会演讲实录整理而成&#xff0c;演讲信息如下&#xff1a; 演讲人&#xff1a;姜伟华 | 阿里云计算平台事业部资深技术专家、阿里云实时数仓Hologres研发负责人 演讲主题&#xff1a;Hologres Serverless之路——揭秘弹性计算组 实时化成为了大数据平台的…

day23_mysql

今日内容 零、 复习昨日 一、函数[了解,会用] 二、事务[重点,理解,面试] 三、数据库范式 零、 复习昨日 见晨考 一、函数 字符串函数数学函数日期函数日期-字符串转换函数流程函数 1.1 字符串函数 函数解释CONCAT (string2 [,... ]) 连接字串LENGTH (string )string长度REPLAC…

【数据结构】单链表基本操作的实现

【单链表的头插和尾插】//无头结点 #include<stdio.h> #include<stdlib.h> typedef struct LNode {int date;struct LNode *next; }LNode,*LinkList; LinkList great_LinkList(LinkList L)//头部插入 {LinkList s;int x,j1;scanf("%d",&x);while(x…

如何使用 Github Action 管理 Issue

本文作者为 360 奇舞团前端开发工程师 Daryl 前言 很多小伙伴打开 github 上的仓库都只使用Code查看代码&#xff0c;或者只是把 github 当成一个代码仓库&#xff0c;但是 github 还提供了很多好用的功能。 其中&#xff0c;GitHub Action就是一个很好用的功能&#xff0c;本文…

基于 Amazon EKS 搭建开源向量数据库 Milvus

一、前言 生成式 AI&#xff08;Generative AI&#xff09;的火爆引发了广泛的关注&#xff0c;也彻底点燃了向量数据库&#xff08;Vector Database&#xff09;市场&#xff0c;众多的向量数据库产品开始真正出圈&#xff0c;走进大众的视野。 根据 IDC 的预测&#xff0c;…

python采集小破站视频弹幕

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 环境使用]: Python 3.8 Pycharm模块使用]: import requests 数据请求 import jieba 分词 import wordcloud 词云 import re 正则通过爬虫程序采集数据 分析数…

微信小程序渲染的富文本里面除了img标签外什么都没有,该如何设置img的大小

微信小程序富文本渲染&#xff1a; <rich-text nodes"{{content}}"style"{{style}}" ></rich-text> content是接口得到的值 let cont object.contentlet a cont.replace(/<img/gi,<img style"max-width:94%;height:auto;margi…

Kafka快速入门

文章目录 Kafka快速入门1、相关概念介绍前言1.1 基本介绍1.2 常见消息队列的比较1.3 Kafka常见相关概念介绍 2、安装Kafka3、初体验前期准备编码测试配置介绍 bug记录 Kafka快速入门 1、相关概念介绍 前言 在当今信息爆炸的时代&#xff0c;实时数据处理已经成为许多应用程序和…

python科研绘图:P-P图与Q-Q图

目录 什么是P-P图与Q-Q图 分位数 百分位数 Q-Q图步骤与原理 Shapiro-Wilk检验 绘制Q-Q图 绘制P-P图 什么是P-P图与Q-Q图 P-P图和Q-Q图都是用于检验样本的概率分布是否服从某种理论分布。 P-P图的原理是检验实际累积概率分布与理论累积概率分布是否吻合。若吻合&#xf…

HPC 工作负载管理 —— IBM Spectrum LSF Suite

全面的工作负载管理解决方案&#xff0c;通过增强用户和管理员体验以及实现规模性能来简化 HPC。 IBM Spectrum LSF Suites 是面向分布式高性能计算 (HPC) 的工作负载管理平台和作业调度程序。基于 Terraform 的自动化现已可用&#xff0c;该功能可在 IBM Cloud 上为基于 IBM …

c语言:解决数组元素右旋问题,时间复杂度O(N)

题目&#xff1a; 给一个数组&#xff0c;如【1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6&#xff0c;7】,k3。 要求得到新数组【5&#xff0c;6&#xff0c;7&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;4】。 方法一&#xff0c;思路和…

GPT模型支持下的Python-GEE遥感云大数据分析、管理与可视化技术及多领域案例实践应用

随着航空、航天、近地空间等多个遥感平台的不断发展&#xff0c;近年来遥感技术突飞猛进。由此&#xff0c;遥感数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量也大幅增长&#xff0c;使其越来越具有大数据特征。对于相关研究而言&#xff0c;遥感大数据的出现为其提…

EtherCAT从站EEPROM组成信息详解(2):字8-15产品标识区

0 工具准备 1.EtherCAT从站EEPROM数据&#xff08;本文使用DE3E-556步进电机驱动器&#xff09;1 字8-字15产品标识区 1.1 产品标识区组成规范 对于不同厂家和型号的从站&#xff0c;主站是如何区分它们的呢&#xff1f;这就要提起SII的字8-字15区域存储的产品标识&#xff…

计算机视觉:人脸识别与检测

目录 前言 识别检测方法 本文方法 项目解析 完整代码及效果展示 前言 人脸识别作为一种生物特征识别技术&#xff0c;具有非侵扰性、非接触性、友好性和便捷性等优点。人脸识别通用的流程主要包括人脸检测、人脸裁剪、人脸校正、特征提取和人脸识别。人脸检测是从获取的图…

电磁场与电磁波part1--矢量分析

目录 1、方向导数 2、散度定理&#xff08;高斯定理&#xff09; 3、散度与旋度的比较 4、旋度定理&#xff08;斯托克斯定理&#xff09; 5、关于点乘、叉乘、梯度、散度、旋度的计算 ~~~~~~~~~~~~~~~~~~~~~~~~ 确认过眼神&#xff0c;是我看不懂的 ~~~~~~~~~~~~~~~~…