在 springboot 中如何使用 nacos 做配置中心? - 知乎

之前项目的配置中心用的是Spring Cloud的Config,上一篇文章也提到过,最近的项目注册中心已从Eureka换到了Nacos,于是顺理成章,配置中心也得接着改。以下是demo版本,还未正式上线,仅供大家参考。文中会对使用Config和Nacos的作为配置中心的区别做简单的介绍。

1、下载Nacos

上一篇文章已经详细介绍过了, 这里附上传送门

月月月芽moon:注册中心从Eureka换到Nacos需要做什么改动1 赞同 · 0 评论文章

2、修改pom文件

接下来修改pom文件,引入nacos-config依赖,版本号在父工程里进行定义了,子模块无需再定义。

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

3、修改bootstrap.yaml配置

bootstrap.yml配置文件里,加上nacos配置文件的位置

4、Nacos端增加配置文件的内容

在Nacos控制台的配置列表,点击加号,即可创建配置文件

创建配置文件

点击右下角的发布按钮之后,则成功生成配置文件。在配置列表里即可看到。

配置列表

service服务会根据${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension},组合为id,在Nacos上读取到匹配的配置文件。

5、修改程序,测试配置文件的读取

@value注解即可注入值

浏览器里访问http://localhost:8086/test/path,即可读取到配置文件内容。成功~

6、Nacos的热更新实现

先把特点亮出来:Nacos作为配置中心,修改了配置后,运行中的项目不用重启就可以读取到更新后的配置。

Nacos热更新实现有两种方式

1.类上加@RefreshScope注解,@Value注入后,结合注解@RefreshScope刷新配置

2、使用@ConfigurationProperties代替@Vlue注入

新建一个FilePathProperties配置类,通过注解@ConfigurationProperties的属性prefix绑定配置文件中的配置,同时配合@Component注解,将配置交由spring管理。实现自动刷新

@Data
@Component
@ConfigurationProperties(prefix = "file")   //前缀名
public class FilePathProperties {
    //变量名
    private String path;
}

再回到使用配置的Controller类,用@Autowired注入FilePathProperties

@RestController
@RequestMapping("test")
public class TestController {


    @Autowired
    private FilePathProperties filePathProperties;

    @GetMapping("path")
    public String getPath(){
        return  "path  =======>" + filePathProperties.getPath();
    }
}

3、接着上面的例子试一下,把path的值由test222改为test333

浏览器里访问http://localhost:8086/test/path,成功读取到修改后的配置。

读取修改后的配置

总结

有一说一,后起之秀Nacos确实有青出于蓝的潜质。作为二者都使用过的我来说,最直观的感受就是更方便,省去了很多步骤。

就从使用方面来对比,使用config作为配置中心需要如下步骤:

1、在git上创建配置中心仓库

2、搭建config服务端

3、配置config客户端

主要是实现自动刷新的过程稍显复杂:

actuator实现自动刷新

1、在Controller上添加@RefreshScope注解

2、使用Postman发送一个post请求到http://localhost:端口号/actuator/refresh 这个接口,触发主动更新

Spring Cloud Bus实现自动刷新

1、配置文件中需要增加 RabbitMQ 的相关内容

2、启动两个以上的客户端进行测试

3、访问其中一个客户端的 actuator/bus-refresh 地址进行同步

其它区别

SpringCloud Config大部分场景结合git 使用, 实现动态刷新需要依赖Spring Cloud Bus消息总线来通知所有的客户端。

springcloud config不提供可视化界面,需要自己开发

Nacos config使用长轮询的方式向服务端查询配置的更新, 一旦配置有变动后,优化了将更新的配置拉到本地这个过程。性能更好。


原网址: 访问
创建于: 2023-09-22 14:54:36
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论