Nacos 配置中心实战(二)

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Nacos 配置中心实战

共享配置

虽然本篇一直只用my-goods这一个服务做案例,但是大家不要忘了,我们这其实是一个微服务系统,在一个微服务系统里,总有些配置是会被许多服务共同使用的,比如Redis的配置。

如果每个服务都在自己的配置里单独维护同样的Redis配置,当Redis配置发生变更时,那么每个服务都要改一次,想想其实也是挺恶心的。

为了解决这个问题,Nacos同样贴心的给我们提供了另一种配置方式:共享配置

  1. 编辑配置文件
    增加shared-configs,并将data-id设置为redis.yaml(可定义, 但必须要有文件扩展名)
spring:
  application:
    name: my-goods
  profiles:
    active: dev
  cloud:
    nacos:
      config:
        server-addr: 114.116.212.76:8850
        username: nacos
        password: nacos
        shared-configs:
          - data-id: redis.yaml
            refresh: true

refresh: true表示动态刷新配置

此时文件扩展名即为data-id的后缀名

  1. 在nacos中增加配置

调皮的小伙伴可以试试这里「配置格式」配成Properties会发生什么

  1. 编写代码
@RefreshScope
@RestController
@RequestMapping("/goods")
@RequiredArgsConstructor
public class GoodsController {
    @Value("${redis}")
    public String redis;
    @GetMapping("/redis")
    public String redis(){
        return "redis url is " + redis;
    }
}

细心的小伙伴可能会说:哎呀呀,你这啥redis配置呀,假的吧!对,大家就假装认为我写了个redis配置就好啦~

  1. 重启项目测试

扩展配置

扩展配置和共享配置的使用方式相同,增加extension-configs即可

spring:
  cloud:
    nacos:
      config:
        server-addr: 114.116.212.76:8850
        username: nacos
        password: nacos
        shared-configs:
          - data-id: redis.yaml
            refresh: true    
        extension-configs:
          - data-id: extension.yaml
            refresh: true 

扩展配置的优先级比共享配置优先级高一些

命名空间

Nacos中还有一个命名空间的概念,不同命名空间的配置相互隔离,相信大家也发现了,在测试案例中,我们一直使用的是一个public的命名空间,这是Nacos的默认命名空间。

通常我们会以项目名做命名空间进行区分,来试试吧~

  1. 假设我们现在做一个商城项目,新建命名空间mall

  2. public命名空间的配置克隆到mall


  3. 修改配置
spring:
  application:
    name: my-goods
  profiles:
    active: dev
  cloud:
    nacos:
      config:
        server-addr: 114.116.212.76:8850
        username: nacos
        password: nacos
        namespace: mall
        shared-configs:
          - data-id: redis.yaml
            refresh: true
        extension-configs:
          - data-id: extension.yaml
            refresh: true

此时就只会读取mall命名空间下的配置啦

文件扩展名与配置文件名

讲到现在,我们用的文件扩展名和配置文件名(data id)依旧是默认的properties服务名,如果小伙伴想要修改的话可以修改file-extensionprefix

file-extension: 文件扩展名

prefix: data-id的前缀,默认为服务名

优雅使用

我们现在已经学会了如何使用@Value加@RefreshScope实现动态刷新配置,但是不得不说这种方式并不优雅。

可以设想一下,凡是在@Value的地方都要加一个@RefreshScope注解,而且平常一个配置可能在多个地方使用,最后就会变成到处都是@RefreshScope, 要多难看就难看。

当然,Nacos也提供了一个@NacosValue加@NacosConfigurationProperties方式让我们可以不需要再使用@RefreshScope注解,但阿鉴觉得这种方式对系统侵入性太强了。

所以,阿鉴推荐使用@ConfigurationProperties方式管理配置进行使用。

  1. 新建配置类, 在配置类上加上@RefreshScope注解
@Data
@RefreshScope
@ConfigurationProperties(prefix = "fruit")
public class GoodsProperties {
    private String name;
    private double price;
    private int number;
}
  1. 使用
@RestController
@RequestMapping("/goods")
public class GoodsController {
    @Autowired
    private GoodsProperties goodsProperties;
    @GetMapping("/all")
    public String all(){
        String result = "name: %s, price: %s, number: %s";
        return String.format(result, goodsProperties.getName(),
                goodsProperties.getPrice(), goodsProperties.getNumber());
    }
}
  1. 此时GoodsController可以不再加@RefreshScope注解了

优先级全测试

到现在,我们已经认识了许多的配置格式了,先来总结一下有哪些吧

  • 服务名
  • 服务名.文件扩展名
  • 服务名-环境.文件扩展名
  • 扩展配置
  • 共享配置

那么,它们的优先级是如何的呢?

这里,为了方便展示效果,阿鉴先告诉大家优先级是怎样的:

共享配置 < 扩展配置 < 服务名 < 服务名.文件扩展名 < 服务名-环境.文件扩展名

  1. 修改配置
spring:
  application:
    name: my-goods
  profiles:
    active: dev
  cloud:
      config:
        server-addr: 114.116.212.76:8850
        username: nacos
        password: nacos
        namespace: mall
        shared-configs:
          - data-id: redis.yaml
            refresh: true
          - data-id: share.properties
            refresh: true
        extension-configs:
          - data-id: extension.properties
            refresh: true
  1. 编写代码
@RefreshScope
@RestController
@RequestMapping("/goods")
@RequiredArgsConstructor
public class GoodsController {
    /**
     * 测试配置优先级
     */
    @Value("${filename}")
    public String filename;
    @GetMapping("/filename")
    public String filename(){
        return "now filename is " + filename;
    }
}
  1. 在Nacos中建出以下配置文件

nacos中不允许文件为空,所以随便在里面写点什么就行

  1. 先在共享配置share.properties文件中增加配置filename=share.properties
  2. 开始测试

    紧接在,分别依次在
    extension.properties文件中增加filename=extension.properties配置,
    my-goods文件中增加filename=my-goods配置,
    my-goods.properties文件中增加filename=my-goods.properties配置,
    my-goods-dev.properties文件中增加filename=my-goods-dev配置
    效果图如下:




小结

今天阿鉴给大家介绍了Nacos配置中心的功能,关于Nacos的动态配置刷新,多种配置方式,以及如何优雅的使用它,最后还给大家测试了所有配置的优先级:共享配置 < 扩展配置 < 服务名 < 服务名.文件扩展名 < 服务名-环境.文件扩展名。希望小伙伴们有所收获。

那么,Nacos的基本功能到这里就介绍完啦,我们下篇再见~

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
16天前
|
JSON Java Nacos
SpringCloud 应用 Nacos 配置中心注解
在 Spring Cloud 应用中可以非常低成本地集成 Nacos 实现配置动态刷新,在应用程序代码中通过 Spring 官方的注解 @Value 和 @ConfigurationProperties,引用 Spring enviroment 上下文中的属性值,这种用法的最大优点是无代码层面侵入性,但也存在诸多限制,为了解决问题,提升应用接入 Nacos 配置中心的易用性,Spring Cloud Alibaba 发布一套全新的 Nacos 配置中心的注解。
|
1月前
|
负载均衡 应用服务中间件 Nacos
Nacos配置中心
Nacos配置中心
93 1
Nacos配置中心
|
1月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
48 5
|
1月前
|
监控 Java 测试技术
Nacos 配置中心变更利器:自定义标签灰度
本文是对 MSE Nacos 应用自定义标签灰度的功能介绍,欢迎大家升级版本进行试用。
152 11
|
1月前
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
37 4
|
1月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,实际使用中常遇到“客户端不发送心跳检测”的问题。本文深入探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务正常运行。通过检查客户端配置、网络连接、日志、版本兼容性、心跳策略、注册状态、重启应用和环境变量等步骤,系统地排查和解决这一问题。
53 3
|
1月前
|
安全 Nacos 数据库
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
54 3
|
1月前
|
SQL 关系型数据库 数据库连接
"Nacos 2.1.0版本数据库配置写入难题破解攻略:一步步教你排查连接、权限和配置问题,重启服务轻松解决!"
【10月更文挑战第23天】在使用Nacos 2.1.0版本时,可能会遇到无法将配置信息写入数据库的问题。本文将引导你逐步解决这一问题,包括检查数据库连接、用户权限、Nacos配置文件,并提供示例代码和详细步骤。通过这些方法,你可以有效解决配置写入失败的问题。
87 0
|
3月前
|
负载均衡 Java Nacos
SpringCloud基础2——Nacos配置、Feign、Gateway
nacos配置管理、Feign远程调用、Gateway服务网关
SpringCloud基础2——Nacos配置、Feign、Gateway
|
4月前
|
安全 Nacos 数据安全/隐私保护
升级指南:从Nacos 1.3.0 到 2.3.0,并兼容 Seata 的鉴权配置
本文详细介绍了如何在微服务环境下从 Nacos 1.3.0 升级到 2.3.0,并确保 Seata 各版本的兼容性。作者小米分享了升级过程中的关键步骤,包括备份配置、更新鉴权信息及验证测试等,并解答了常见问题。通过这些步骤,可以帮助读者顺利完成升级并提高系统的安全性与一致性。
148 8
升级指南:从Nacos 1.3.0 到 2.3.0,并兼容 Seata 的鉴权配置