概述

  1. Nacos:Dynamic Naming and Configuration Service

  2. Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

    Nacos生态图,来自于官网

Nacos服务注册和配置中心 - 图1

Nacos地图,来自于官网

Nacos服务注册和配置中心 - 图2

  1. Nacos就是注册中心+配置中心的组合,等价于Eureka+Config+Bus的组合

  2. Nacos支持CP或者AP,可以进行切换

Nacos安装并运行

  1. 下载2.0.3版本

    Nacos服务注册和配置中心 - 图3

  1. 运行

    解压之后的文件夹

Nacos服务注册和配置中心 - 图4

进入bin目录下,运行startup.sh

sh startup.sh -m standalone代表单机运行模式,默认的话是集群运行模式

Nacos服务注册和配置中心 - 图5

  1. 通过页面进行访问

    查看start.out日志中的启动信息

Nacos服务注册和配置中心 - 图6

访问,默认用户名密码为nacos,在配置文件中可以进行修改

Nacos服务注册和配置中心 - 图7

父工程创建

Nacos服务发现

  • Nacos Discovery integrate with the Netflix Ribbon, RestTemplate or OpenFeign can be used for service-to-service calls.

服务提供者模块

  1. 创建Module

    Nacos服务注册和配置中心 - 图9

  1. 修改pom文件

    1. <dependencies>
    2. <dependency>
    3. <groupId>org.springframework.boot</groupId>
    4. <artifactId>spring-boot-starter-web</artifactId>
    5. </dependency>
    6. <dependency>
    7. <groupId>org.springframework.boot</groupId>
    8. <artifactId>spring-boot-starter-actuator</artifactId>
    9. </dependency>
    10. <dependency>
    11. <groupId>com.alibaba.cloud</groupId>
    12. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    13. </dependency>
    14. </dependencies>
  1. 编写配置文件

    Nacos服务注册和配置中心 - 图10

  1. 主启动类

    Nacos服务注册和配置中心 - 图11

  1. 业务类

    Nacos服务注册和配置中心 - 图12

  1. 测试

    Nacos服务注册和配置中心 - 图13

  1. 页面查看Nacos

    对服务因为提供了很多操作

Nacos服务注册和配置中心 - 图14

详情

Nacos服务注册和配置中心 - 图15

  1. 为了演示负载均衡,再创建一个一样的模块,端口号为9002

    Nacos服务注册和配置中心 - 图16
    Nacos服务注册和配置中心 - 图17

服务消费者模块

  1. 创建Module

    Nacos服务注册和配置中心 - 图18

  1. 修改pom文件

    1. <dependencies>
    2. <dependency>
    3. <groupId>org.springframework.boot</groupId>
    4. <artifactId>spring-boot-starter-web</artifactId>
    5. </dependency>
    6. <dependency>
    7. <groupId>org.springframework.boot</groupId>
    8. <artifactId>spring-boot-starter-actuator</artifactId>
    9. </dependency>
    10. <dependency>
    11. <groupId>com.alibaba.cloud</groupId>
    12. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    13. </dependency>
    14. </dependencies>
  1. 修改配置文件

    Nacos服务注册和配置中心 - 图19

  1. 主程序

    Nacos服务注册和配置中心 - 图20

  1. 业务类

    Nacos底层依赖Ribbon,可以通过Ribbon来实现负载均衡,并通过RestTemplate来实现服务的调用

Nacos服务注册和配置中心 - 图21

Nacos服务注册和配置中心 - 图22

Nacos服务注册和配置中心 - 图23

  1. 测试

    具备负载均衡能力

Nacos服务注册和配置中心 - 图24

  1. Nacos注册中心

    Nacos服务注册和配置中心 - 图25

Nacos配置管理

  • Use Spring Cloud Alibaba Nacos Config to quickly access Nacos configuration management capabilities based on Spring Cloud’s programming model.
  • Nacos作为配置中心,可以替代SpringCloud Config + Bus的实现,甚至更加优秀,了可以实现自动动态刷新,而不需要手动请求去刷新
  • 基础配置演示的是作为一个集中式配置中心的使用方式,通过切换profile来实现从配置中心读取不同的配置
  • 分类配置可以配合权限控制功能实现更加精细的对于不同用户和环境的隔离

基础配置

  1. 创建Module

    Nacos服务注册和配置中心 - 图26

  1. 修改pom文件

    1. <dependencies>
    2. <!-- 服务发现依赖-->
    3. <dependency>
    4. <groupId>com.alibaba.cloud</groupId>
    5. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    6. </dependency>
    7. <!-- 配置中心依赖-->
    8. <dependency>
    9. <groupId>com.alibaba.cloud</groupId>
    10. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    11. </dependency>
    12. <dependency>
    13. <groupId>org.springframework.boot</groupId>
    14. <artifactId>spring-boot-starter-web</artifactId>
    15. </dependency>
    16. <dependency>
    17. <groupId>org.springframework.boot</groupId>
    18. <artifactId>spring-boot-starter-actuator</artifactId>
    19. </dependency>
    20. </dependencies>
  1. 配置文件

    在项目初始化时,要保证先从配置中心进行配置拉取(bootstrap.yaml),拉取配置之后,才能保证项目的正常启动。

springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application

bootstrap.yaml中配置Nacos Server的地址和应用名(作为配置文件名的组成部分)

目前配置文件的类型只支持yamlproperties

Nacos服务注册和配置中心 - 图27

application.yaml

Nacos服务注册和配置中心 - 图28

bootstrap.yaml结合application.yaml表明项目启动后会从配置中心加载名为nacos-config-dev.yaml的配置文件

由于,配置中心配置的文件名也就确认了

Nacos服务注册和配置中心 - 图29

也即Data Id:

Nacos服务注册和配置中心 - 图30

  1. 主启动类

    Nacos服务注册和配置中心 - 图31

  1. 业务类

    通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新

Nacos服务注册和配置中心 - 图32

  1. 自动刷新测试

    配置中心配置文件未修改之前

Nacos服务注册和配置中心 - 图33

修改配置中心的配置文件

Nacos服务注册和配置中心 - 图34

直接在浏览器请求,甚至不用手动发送请求更新

Nacos服务注册和配置中心 - 图35

  1. 切换不同配置测试

    演示不同的配置集切换

Nacos服务注册和配置中心 - 图36

新建Data ID为nacos-config-test.yaml的配置文件

Nacos服务注册和配置中心 - 图37

在application.yaml切换环境

Nacos服务注册和配置中心 - 图38

Nacos服务注册和配置中心 - 图39

分类配置

  1. 命名空间

    Nacos服务注册和配置中心 - 图40

默认为public

  1. Group分组

    Nacos服务注册和配置中心 - 图41

默认为DEFAULT_GROUP

  1. Data ID

    Nacos服务注册和配置中心 - 图42

  1. 深入理解Nacos分类配置可以参考LarsCheng’s Blog Nacos(六):多环境下如何“管理”及“隔离”配置和服务

    • 单个用户

      对于Nacos单个用户而言,NameSpace就可以用做环境的区分,可以不使用分组的概念,根据配置文件的,在不同环境中,添加不同的配置集来实现不同服务的配置

Nacos服务注册和配置中心 - 图43

当然还可以使用Group再细分,在服务的基础上再按照Group分组

Nacos服务注册和配置中心 - 图44

  • 多个用户

    NameSpace可以用做用户之间的隔离,需要配合权限控制

Nacos服务注册和配置中心 - 图45

而对每一个NameSpace而言,又可以像单个用户那样借助Group实现对不同环境的管理

Nacos服务注册和配置中心 - 图46

当业务规模更大的时候,可以借助Group来隔离不同的项目

Nacos服务注册和配置中心 - 图47

  • NameSpace和Group可以灵活搭配进行隔离的操作。

    在bootstrap.yaml中通过NameSpace、Group和DataID可以唯一执行Nacos中的配置文件

Nacos服务注册和配置中心 - 图48

Nacos集群

  1. 集群模式架构文档

    Nacos服务注册和配置中心 - 图49

  1. 持久化问题

    在之前单机版重启Nacos之后,我们发现我们的配置并未消失

Nacos服务注册和配置中心 - 图50

因为Nacos默认自带内置数据源进行存储。

但是每一个Nacos都使用自带数据源有个问题,数据如何保证一致性

  1. 一致性保证

    • 采用外置数据源,可以使用MySQL,然后集群中所有的Nacos都使用同一个MySQL来实现数据的一致性保证。

Nacos持久化配置

  1. Nacos默认自带的是嵌入式数据库derby

  2. derby切换到Nacos

    Nacos服务注册和配置中心 - 图51

  1. 执行sql文件

    直接执行conf目录下的nacos-mysql.sql

Nacos服务注册和配置中心 - 图52

Nacos服务注册和配置中心 - 图53

  1. 修改conf目录下的application.properties配置

    Nacos服务注册和配置中心 - 图54

修改为我们自己的MySQL

Nacos服务注册和配置中心 - 图55

单机模式启动

成功启动

Nacos服务注册和配置中心 - 图56

Nacos集群搭建

  • Nacos配置

    在之前持久化配置的基础之上,修改conf目录下的cluster.conf文件

cluster.conf文件记录的是集群的IP和端口号,表示哪些Nacos实例组成一个集群

格式为ip:端口号

Nacos服务注册和配置中心 - 图57