Nacos——Nacos配置中心搭建及动态刷新配置及踩坑


近期有用到阿里的开源配置中心及注册中心nacos,特此记录并分享一些学习笔记及配置踩坑点。

一、Nacos配置中心介绍

从架构图上可以知道,Nacos提供了两种服务,一种是用于服务注册、发现的Naming Service,一种是用于配置中心、动态配置的Config Service,而他们底层均由core模块来支持。外层提供OpenAPI供客户端使用,并提供了User Console、Admin Console方便用户使用 。
在这里插入图片描述
用户通过管理平台发布配置,通过HTTP调用将配置注册到服务端,服务端将之保存在MySQL等持久化存储引擎中;用户通过客户端SDK访问服务端的配置,同时建立HTTP的长轮询监听配置项变更,同时为了减轻服务端压力和保证容灾特性,配置项拉取到客户端之后会保存一份快照在本地文件中,SDK优先读取本地文件里的配置。当服务端的配置发生变更时,客户端会通过监听机制,拿到变更后的最新配置信息。

在这里插入图片描述

简单来说,Nacos 客户端是怎么实时获取到 Nacos 服务端的最新数据的:

  • Nacos 并不是通过推的方式将服务端最新的配置信息发送给客户端的,而是客户端维护了一个长轮询的任务,定时去拉取发生变更的配置信息,然后将最新的数据推送给 Listener 的持有者。

二、配置中心搭建

1.配置中心启用

首先需要到官网上下载nacos-server,然后将服务跑起来之后。根据自己的需要,建立几个命名空间,当然使用默认的public的命名空间也是可以的,如图所示。
在这里插入图片描述

2.创建配置文件

在配置列表中创建配置文件,其中配置文件命名方式需要注意。

在Nacos-Server中新建配置,其中Data ID它的定义规则是:${prefix}-${spring.profiles.active}.${file-extension}

prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix 来配置。

spring.profiles.active 即为当前环境对应的 profile,可以通过配置项 spring.profiles.active 来配置。

file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在

在本文中,我的项目名称为vaso-core,配置文件使用的是dev环境,因此我的配置文件如下:

在这里插入图片描述
其中的文件内容就是正常的yaml格式的内容填写就行,这边就不具体展示了。

在这里插入图片描述

3.工程配置

首先我们需要导入nacos-config的依赖(注:我这边没有使用nacos的注册发现,依旧沿用自身使用的eureka)。其中依赖版本的对应关系可以在官网中查找。

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2.1.2.RELEASE</version>
</dependency>

其次我们需要在配置文件中进行配置,采用bootstrap.yml文件进行配置,因为springboot会优先启动bootstrap.yml文件中的配置。其中文件内容如下:

# Tomcat
server: 
  port: 9200

# Spring
spring: 
  application:
    # 应用名称
    name: zhiyu-auth
  profiles:
    # 环境配置
    active: dev
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8848
        # 命名空间,这里用的dev命令空间的id
        namespace: c91a48b4-cf04-45ab-b9bf-55f1204d7a88
      config:
        # 配置中心地址
        server-addr: 127.0.0.1:8848
        # 命名空间,这里用的dev命令空间的id
        namespace: c91a48b4-cf04-45ab-b9bf-55f1204d7a88
        # 配置文件格式
        file-extension: yml
        # 共享配置
        shared-configs:
          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

最后我们需要引入@refreshscope关键字,保证可以实时刷新配置。在controller层或者要刷新的值所在的类上进行注释就行。
在这里插入图片描述
其中我们的demo是如下所示:

package com.zhiyu.gateway.config.properties;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;

/**
 * 验证码配置
 * 
 * @author zhiyu
 */
@Configuration
@RefreshScope
@ConfigurationProperties(prefix = "security.captcha")
public class CaptchaProperties
{
    /**
     * 验证码开关
     */
    private Boolean enabled;

    /**
     * 验证码类型(math 数组计算 char 字符)
     */
    private String type;

    public Boolean getEnabled()
    {
        return enabled;
    }

    public void setEnabled(Boolean enabled)
    {
        this.enabled = enabled;
    }

    public String getType()
    {
        return type;
    }

    public void setType(String type)
    {
        this.type = type;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值