微服务架构: nacos配置中心的实现

一. 背景

 在微服务架构中,每个服务都有自己的配置,配置数据库、redis的参数配置、服务器的地址等。通常情况下,在项目中配置了application-dev.yml、application-prod.yml、application-test.yml等多套环境配置,和应用打包在一起,启动服务时,选择不同的环境配置。如果需要修改配置信息,则需要重新进行打包,重启服务器。如是集群部署,还要考虑集群管理配置,代码安全、审核机制等因素,效率低。因此,动态配置就应运而生了。

二. 技术选型

 微服务配置中心的技术选型一般有以下几个:ApolloDisconf、Spring Cloud Config、Nacos等[1]。

Apollo: 携程开源的配置管理中心,具备规范的流程治理、权限等特性。

Disconf:百度开源的配置管理中心,目前已经不维护了。

Spring Cloud Config:Spring Cloud 生态组件,结合git,可以和Spring Cloud体系无缝整合。

Nacos: 阿里开源的配置中心,也可以做DNS和RPC的服务发现。

至于它们之间的区别,请参考博客[1]。

由于Nacos比Apollo、Spring Cloud Config使用简单,而且还可以支持DNS和RPC的服务发现,博主选择了Nacos作为配置中心。

三. nacos配置中心的实现

 本文的内容概要如下图1所示,将从四个方面带您了解nacos的使用。本文的demo代码已经上传github,小伙伴可以从自行下载。

微服务架构: nacos配置中心的实现_第1张图片 图1 内容大纲

 

3.1 依赖库

由于需要把微服务注册到nacos并且读取配置中心配置,所以要依赖2个库。

def alibabaCloudVersion = '2.2.3.RELEASE'

// nacos 注册
implementation "com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:${alibabaCloudVersion}"
// nacos 配置
implementation "com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config:${alibabaCloudVersion}"

3.2 项目配置

1)application开启:@EnableDiscoveryClient,把微服务注册到nacos。

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigApplication.class, args);
    }
}

2)将application.properties改为bootstrap.yml,添加nacos注册、读取配置中心、服务地址、端口等配置信息。

server:
  port: 8852

spring:
  application:
    name: redis

  cloud:
    nacos:
      config: # nacos 配置中心
        server-addr: localhost:8848
        file-extension: yaml # 配置文件格式是yml
        prefix: redis # 配置文件前缀
        group: DEFAULT_GROUP # group是默认的话,可以不写
        # dataID不用配置:,只需要在nacos后台将dataId命名为: ${prefix}-${spring.profile.active}.${file-extension}
        #;例如:redis-dev.yaml
      discovery: # 注册到nacos
        server-addr: localhost:8848

  profiles:
    active: dev

  redis: # 下发redis的配置信息
    host: http://localhost
    port: 3379
    database: 0

3)添加测试controller(只是为了示范redis的配置信息的读取

@RestController
public class ConfigController {
    @Value("${spring.redis.host}")
    private String reidsHost;

    @Value("${spring.redis.port}")
    private String reidsPort;

    @Value("${spring.redis.database}")
    private String reidsDatabase;

    @GetMapping(path = "nacos/config/getRedisConfig")
    public String getRedisConfig() {
        return "reids cofig: [ host: " + reidsHost + ", port: " + reidsPort + ", database: " + reidsDatabase + " ]";
    }
}

运行代码,在浏览器输入:http://localhost:8852/nacos/config/getRedisConfig,服务器读取了本地bootstrap.yml的配置信息。

微服务架构: nacos配置中心的实现_第2张图片

3.3 nacos后台配置

本小节内容是本文的重点内容。 

1)启动 nacos

终端输入: sh startup.sh -m standalone,在浏览器输入:http://localhost:8848/nacos/#/login, 输入账号、密码:nacos、nacos。

2)创建配置文件

我们来看一下bootstrap.yml中已经配置了命名为:redis-dev.yml的配置文件,规则如下图所示: ${prefix}-${spring.profile.active}.${file-extension}。

微服务架构: nacos配置中心的实现_第3张图片

接着,我们在nacos后台创建redis-dev.yml的配置文件。

A.点击新增按钮

微服务架构: nacos配置中心的实现_第4张图片

B.编辑内容并发布

微服务架构: nacos配置中心的实现_第5张图片

3)开启自动刷新配置

@RefreshScope // 开启配置自动刷新
public class ConfigController {

}

4) 重新启动服务

 重启服务之后,我们从nacos后台修改配置中心的内容:redis 的port和database,并点击发布:

port: 3379 改为: 3381 
database: 0 改为: 100

控制台输出了以下信息,我们看到微服务已经自动拉到了最新的配置信息。

微服务架构: nacos配置中心的实现_第6张图片

在浏览器输入:http://localhost:8852/nacos/config/getRedisConfig,看到成功显示了最新的配置信息:

3.4 配置回滚

有时候要回滚线上配置信息,nacos后台提供了配置回滚功能。操作步骤如下:

微服务架构: nacos配置中心的实现_第7张图片

在弹出的历史版本中选择任意一个版本回滚。

微服务架构: nacos配置中心的实现_第8张图片

例如在这里,博主选择了第一个历史版本回滚。我们在浏览器输入:http://localhost:8852/nacos/config/getRedisConfig,看到回滚信息已生效。

微服务架构: nacos配置中心的实现_第9张图片

以上就是本篇博客的全部内容,感谢阅读。本文的demo代码已经上传github,小伙伴可以从自行下载。

参考链接:https://baijiahao.baidu.com/s?id=1662923343412122321&wfr=spider&for=pc

 

你可能感兴趣的:(后端,spring,spring,boot,后端)