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


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

    🏠 :小破站

    前言

    微服务架构的崛起为开发者提供了更灵活、可维护的解决方案。然而,随之而来的挑战是如何管理和维护这些分散的服务。在本文中,我们将探索如何利用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.bootgroupId>
      <artifactId>nacos-discovery-spring-boot-starterartifactId>
      <version>0.2.12version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    🔚:成功示意图

    在这里插入图片描述

    第二:配置中心

    1️⃣:maven坐标

    <dependency>
      <groupId>com.alibaba.bootgroupId>
      <artifactId>nacos-config-spring-boot-starterartifactId>
      <version>0.2.12version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    🔚:成功示意图

    在这里插入图片描述

    上面演示了可以直接读取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文件中。

  • 相关阅读:
    Compose中Canvas绘制
    真正解决办法:WINDOWS7/WIN7提示错误:无法启动此程序,因为计算机中丢失D3DCOMPILER_47.dll。尝试重新安装该程序以解决此问题
    C++新经典10--vector以及其使用
    安装HBase集群
    【Scheme】Scheme 编程学习 (六) —— lambda 函数
    AtomicInteger类简介说明
    开发必备工具
    每天5分钟快速玩转机器学习算法:支持向量机SVM的优势和缺点
    anaconda安装pytorch
    武汉星起航:做亚马逊最常见的错误思想
  • 原文地址:https://blog.csdn.net/Mrxiao_bo/article/details/134420894