注册中心 + 配置中心 Nacos

本贴最后更新于 550 天前,其中的信息可能已经沧海桑田

image.png

注册中心 + 配置中心 Nacos

Nacos 简介

在 Spring Cloud Netflix 阶段我们采用 Eureka 做作为我们的服务注册与发现服务器,现利用 Spring Cloud Alibaba 提供的 Nacos 组件替代该方案。

Nacos 官网

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

nacos 注册中心工作流程

image.png

Nacos 安装

 docker run --restart=always --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server

查看 nacos 日志信息:docker logs nacos

image.png

访问地址

http://ip:8848/nacos

nacos 的默认端口号是 8848,珠穆朗玛峰的高度也是 8848 米呦!默认账号密码是 nacos/nacos

image.png

Nacos 注册中心使用

1)在资源中导入 nacos 演示工程

2)顶级父工程添加依赖包

<!-- nacos注册中心依赖包 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 监控检查-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2)nacos-web 工程添加配置文件 bootstrap.yml

spring:
  application:
    name: nacos-web
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.200.128:8848
server:
  port: 9100
#健康检查
management:
  endpoints:
    web:
      exposure:
        include: "*"

3)nacos-web 工程添加启动类

@SpringBootApplication
@EnableDiscoveryClient
public class NacosWebApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosWebApplication.class,args);
    }
}

4)nacos-web 工程新建 InfoController

@RestController
public class InfoController {

    @Value("${server.port}")
    private String port;

    @Value("${key:''}")
    private String key;

    @GetMapping(value = "/echo/{message}")
    public String echo(@PathVariable(value = "message") String message) {
        return "Hello Nacos Discovery " + message + ", i am from port " + port;
    }

    @GetMapping(value = "/config")
    public String config() {
        return "Hello Nacos Config get "+key ;
    }
}

5)启动服务并查看效果

image.png

5)修改端口,查看 nacos 集群支持

image.png

Nacos 配置中心使用

基础使用

1)顶级父工程添加依赖

<!-- nacos配置中心依赖包 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2)核心配置信息

注意:
    配置文件必须是bootstrap.properties或者bootstrap.yml,如果配置application.properties或者application.yml会导致加载不到配置.
spring:
  application:
    name: nacos-web
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.200.140:8848
      config:
        server-addr: 192.168.200.140:8848
        file-extension: yml #指定文件扩展名,默认为properties
server:
  port: 9100
#全局健康检查
management:
  endpoints:
    web:
      exposure:
        include: "*"
#日志
logging:
  level:
    org.springframework.web: debug

新建配置

配置文件名称 : 默认和 spring.application.name 一致

文件后缀 :默认是 properties

nacos 支持 6 种文件格式

image.png

测试 config 接口

http://127.0.0.1:9100/config

image.png

动态刷新

Nacos Config Starter 默认为所有获取数据成功的 Nacos 的配置项添加了监听功能,在监听到服务端配置发生变化时会实时触发 org.springframework.cloud.context.refresh.ContextRefresher 的 refresh 方法 。

如果需要对 Bean 进行动态刷新,参照 Spring 和 Spring Cloud 规范。推荐给类添加 @RefreshScope 进行自动刷新

多环境支持

我们在做项目开发的时候,可能会存在多种环境,并且每一种环境所设置的配置都是不同的,所以我们可能会在线上手工修改这些配置信息。同时 Spring 中为我们提供了 Profile 这个功能。我们只需要在启动的时候添加一个虚拟机参数,激活自己环境所要用的 Profile 就可以了。

操作起来很简单,只需要为不同的环境编写专门的配置文件,如:application-dev.ymlapplication-prod.yml, 启动项目时只需要增加一个命令参数 --spring.profiles.active=环境名称 即可。

测试环境 test

开发环境 dev

生产环境 prod

支持不同环境配置

nacos 可以同时支持多环境配置。只需要在 nacos 配置中心中根据 dataId 进行区分即可。dataId 完整的拼接格式如下

在 Nacos Config Starter 中,dataId 完整的拼接格式如下

${prefix}-${spring.profiles.active}.${file-extension}
  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix 来配置。
  • spring.profiles.active 即为当前环境对应的 profile
  • file-extension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。 目前只支持 properties 类型。

1)修改bootstrap.yml


spring:
  profiles:
    active: dev #开发环境
  application:
    name: nacos-web
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.200.140:8848
      config:
        server-addr: 192.168.200.140:8848
        file-extension: yml #后缀
        prefix: nacos-web  #前缀
server:
  port: 9100

2)nacos中新增配置信息

image.png

配置共享

不同环境下配置信息共享

在开发中,虽然可以在不同环境下使用不同的配置文件,但是有一些配置是通用的,需要在不同的环境下,都进行生效。

  1. 当开发环境为:dev 时。

image.png

  1. 当开发环境为:test 时。

image.png

根据上述测试,可以发现,不同的开发环境下都会去加载 nacos-web.yml ,也就是没有指定特定环境的文件。那么对于通用配置就可以设置在这个文件中。

更新 nacos 配置中心的 nacos-web.yml

image.png

InfoController 中获取该值

image.png

环境为 test:访问并获取结果

image.png

环境为 dev:访问并获取结果

image.png

不同应用间配置信息共享

在实际项目中,常常需要不同应用间配置共享。比如 redis 连接信息,很多服务都需要,那么就可以把这部分信息交给 Nacos 进行管理并且实现配置共享,从而实现配置的重用。

1)Nacos 中新建 common.yml

image.png

2)修改 nacos-web 工程配置文件,添加

spring:
  application:
    name: nacos-web
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.200.128:8848
      config:
        server-addr: 192.168.200.128:8848
        file-extension: yml #指定文件扩展名,默认为properties
        prefix: nacos-web
      
      
        #添加共享配置的dataId,如多个使用逗号分隔,并且越靠后,优先级越高
        #文件后缀名不能少,只支持yaml,yml,properies
        shared-dataids: common.yml
        #哪些共享配置支持动态刷新,如多个使用逗号分隔
        refreshable-dataids: common.yml
      
      
  profiles:
    active: dev #开发环境
server:
  port: 9100
management:
  endpoints:
    web:
      exposure:
        include: "*"
#日志
logging:
  level:
    org.springframework.web: debug

3)InfoController 中获取该值

image.png

4)导入 demo 工程

5)Nacos 中创建 example 工程对应配置文件image.png

web 工程访问结果如下:

image.png

example 访问结果如下:

image.png

  • Nacos
    23 引用 • 4 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...