首页 > 其他分享 >NACOS配置管理

NACOS配置管理

时间:2024-07-17 16:59:39浏览次数:17  
标签:配置 配置管理 nacos NACOS yaml 路由 import cloud

1、配置管理可以解决什么问题

(1)统一管理微服务模块相同的配置

(2)实现热部署,更新配置不需要重启服务

(3)实现动态路由

1.1、实现统一管理配置

1.1.1、新增配置

1.1.2、 配置基本属性

 还可以将共有的swagger和log的配置抽取出来,新建shared-swagger.yaml和shared-log.yaml

在cart模块引入依赖

  <!--nacos配置管理-->
  <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  </dependency>
  <!--读取bootstrap文件-->
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-bootstrap</artifactId>
  </dependency>

 SpringCloud在初始化上下文的时候会先读取一个名为bootstrap.yaml(或者bootstrap.properties)的文件,如果我们将nacos地址配置到bootstrap.yaml中,那么在项目引导阶段就可以读取nacos中的配置了,bootstrap.yaml会在模块的yaml文件先读取,所以读取了bootstrap.yaml文件就可以知道Nacos的地址来读取所抽取的配置项

1.2.3、 新建bootstrap.yaml,并添加数据

spring:
  application:
    name: cart-service # 服务名称
  profiles:
    active: dev
  cloud:
    nacos:
      server-addr: 192.168........ # nacos地址
      config:
        file-extension: yaml # 文件后缀名
        shared-configs: # 共享配置
          - dataId: shared-jdbc.yaml # 共享mybatis配置
          - dataId: shared-log.yaml # 共享日志配置
          - dataId: shared-swagger.yaml # 共享日志配置

 1.1.4、修改原先的application.yaml文件去掉已经抽取的

server:
  port: 8082
feign:
  okhttp:
    enabled: true # 开启OKHttp连接池支持
hm:
  swagger:
    title: 购物车服务接口文档
    package: com.hmall.cart.controller
  db:
    database: hm-cart

1.2、实现热更新

对于某些重要参数能够在不重启服务的情况下来修改参数的值

1.2.1、新建配置项cart-service.yaml

hm:
  cart:
    maxAmount: 1 # 购物车商品数量上限

 1.2.2、创建Properties类于yaml配置参数进行绑定

package com.hmall.cart.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "hm.cart")
public class CartProperties {
    private Integer maxAmount;
}

1.2.3、 在类中引入该Bean对象,将写死的参数值通过get方法来动态设设置

 之后要想修改参数的值,直接在nacos中进行修改且不需要重启服务

1.3、动态路由

1.3.1、在网关模块引入依赖

<!--统一配置管理-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--加载bootstrap-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

1.3.2、新建bootstrap.yaml文件

来对nacos中的配置yaml文件进行读取,并将之前的application.yaml文件的路由规则删除

spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: 192.168...........
      config:
        file-extension: yaml
        shared-configs:
          - dataId: shared-log.yaml # 共享日志配置

 1.3.3、在Gateway模块添加监听器类

package com.hmall.gateway.route;

import cn.hutool.json.JSONUtil;
import com.alibaba.cloud.nacos.NacosConfigManager;
import com.alibaba.nacos.api.config.listener.Listener;
import com.alibaba.nacos.api.exception.NacosException;
import com.hmall.common.utils.CollUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.route.RouteDefinition;
import org.springframework.cloud.gateway.route.RouteDefinitionWriter;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;

import javax.annotation.PostConstruct;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Executor;

@Slf4j
@Component
@RequiredArgsConstructor
public class DynamicRouteLoader {

    private final RouteDefinitionWriter writer;
    private final NacosConfigManager nacosConfigManager;

    // 路由配置文件的id和分组
    private final String dataId = "gateway-routes.json";
    private final String group = "DEFAULT_GROUP";
    // 保存更新过的路由id
    private final Set<String> routeIds = new HashSet<>();

    @PostConstruct
    public void initRouteConfigListener() throws NacosException {
        // 1.注册监听器并首次拉取配置
        String configInfo = nacosConfigManager.getConfigService()
                .getConfigAndSignListener(dataId, group, 5000, new Listener() {
                    @Override
                    public Executor getExecutor() {
                        return null;
                    }

                    @Override
                    public void receiveConfigInfo(String configInfo) {
                        updateConfigInfo(configInfo);
                    }
                });
        // 2.首次启动时,更新一次配置
        updateConfigInfo(configInfo);
    }

    private void updateConfigInfo(String configInfo) {
        log.debug("监听到路由配置变更,{}", configInfo);
        // 1.反序列化
        List<RouteDefinition> routeDefinitions = JSONUtil.toList(configInfo, RouteDefinition.class);
        // 2.更新前先清空旧路由
        // 2.1.清除旧路由
        for (String routeId : routeIds) {
            writer.delete(Mono.just(routeId)).subscribe();
        }
        routeIds.clear();
        // 2.2.判断是否有新的路由要更新
        if (CollUtils.isEmpty(routeDefinitions)) {
            // 无新路由配置,直接结束
            return;
        }
        // 3.更新路由
        routeDefinitions.forEach(routeDefinition -> {
            // 3.1.更新路由
            writer.save(Mono.just(routeDefinition)).subscribe();
            // 3.2.记录路由id,方便将来删除
            routeIds.add(routeDefinition.getId());
        });
    }
}

1.3.4、 重启服务并测试

 

标签:配置,配置管理,nacos,NACOS,yaml,路由,import,cloud
From: https://blog.csdn.net/m0_67646306/article/details/140469134

相关文章

  • Nacos(二)源码分析Nacos服务端注册示例流程
    上回我们讲解了客户端配置好nacos后,是如何进行注册到服务器的,那我们今天来讲解一下服务器端接收到注册实例请求后会做怎么样的处理。首先还是把博主画的源码分析图例发一下,让大家对整个流程有一个大概的理解:图示流程地址:https://www.processon.com/view/link/5f7e895......
  • 【信创国产化】Nacos 2.3.2 连接达梦数据库
    JeecgBoot目前提供的nacos版本号2.3.2已经支持与达梦数据库对接。jeecg-boot/jeecg-server-cloud/jeecg-cloud-nacos项目默认加入了达梦驱动和yml配置。如果你是老代码,可以参考下面的步骤手工集成项目地址:https://github.com/jeecgboot/JeecgBoot手工对接达梦数据库1......
  • 0day nacos RCE命令执行漏洞复现含POC
     0x01阅读须知        技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用......
  • Spring Boot中的配置管理详解
    SpringBoot中的配置管理详解大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!SpringBoot作为现代Java应用程序开发的主流框架之一,提供了强大的配置管理功能,本文将深入探讨SpringBoot中配置管理的各种技术细节和最佳实践。1.配置文件SpringBoot支持......
  • 使用Spring Boot集成Nacos
    使用SpringBoot集成Nacos大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代微服务架构中,服务发现和配置管理是两个非常重要的组成部分。Nacos作为阿里巴巴开源的一个动态服务发现、配置管理和服务管理平台,非常适合用来管理SpringBoot微服务应用。本......
  • nacos 服务注册原理
    springboot的各种starter会根据SPI机制,读取META-INFO/spring.factories文件,自动注册一些bean,spring-cloud-starter-alibaba-nacos-discovery的spring.factories如下:org.springframework.cloud.bootstrap.BootstrapConfiguration=\com.alibaba.cloud.nacos.discover......
  • 什么是Nacos???Nacos是干啥的???如何使用Nacos???
    目录1.引言:2.服务调用3.注册中心原理3.1.服务注册者(ServiceRegistrar)3.2.服务消费者(ServiceConsumer)3.3注册中心(ServiceRegistry)4.Nacos注册中心5.服务注册5.1.添加依赖5.2.配置Nacos5.3.启动服务实例6.服务发现6.1.引入依赖6.2配置Nacos地址6.3.发现并......
  • Nacos配置中心简单使用(直接可以上手)
    本文主要学习和使用Nacos的配置中心1.Nacos简介Nacos是一个开源的服务发现和配置管理平台,主要用于微服务架构中。Nacos的名字源自于“NamingandConfigurationService”的缩写,它提供了两大核心功能:服务发现和服务配置。特性:服务发现:是微服务架构中的一个关键概......
  • Nacos
    Nacos是一个开源的分布式服务发现和配置管理平台。它提供了服务注册、发现、配置,管理,命名空间和分组、高可用和负载均衡、安全认证等功能。帮助开发者构建微服务架构。官网:https://nacos.io/zh-cn/docs/what-is-nacos.html一.Nacos的基本概念1.服务注册与发现Nacos可以......
  • Nacos安装指南
    目录前言 1.Windows安装1.1下载安装包 1.2解压 1.3端口配置 1.4启动1.5访问2.Linux安装2.1安装JDK2.2上传安装包2.3解压2.4端口配置2.5启动前言Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程......