这样还能不会Nacos吗?

177 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 8 天,点击查看活动详情

本篇文章带你更清晰的了解上篇的理论知识,手把手来做nacos的搭建。文章主要分为服务发现与配置管理两部分。

Nacos搭建与服务发现

先简单介绍一下小编使用的项目工程结构,看下面一张图:

  • xuecheng-plus-parent是我们的父工程,简单来说所有模块都依赖它。
  • content、system两个模块下都有api、service、model三个子模块。
  • api模块专注于接口开发;service负责业务层;model是所有的数据模型,dto、po等等。

image.png

工程结构是这样的,不理解可以留言。

下面要开始做正事啦🚀🚀🚀
首先我们需要在父工程中导入springcloud依赖,让所有项目都依赖它。依赖管理如下:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>${spring-cloud.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

接着,我们在content与service模块下的api字模块中添加nacos的服务发现依赖,如下:

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

依赖添加完毕后,就是去配置了。

nacos的部署我们在上篇文章Docker部署管理页面部分 中已经说过了。

先来访问nacos,创建一个命名空间(命名空间->新建命名空间)。

  • 命名空间是用于区分环境,比如开发环境、生产环境。
  • 分组group用来区分项目。
  • 下图中命名空间id不填写的话会自动生成一个,这里建议自己填写。

image.png

接下来,我们打开content与system模块下的api子模块的pom文件,添加服务发现的依赖,使其变成客户端。

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

书写两个api模块下的bootstrap.yml配置文件。

spring:
  application:
    name: system-api
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery:
        namespace: dev148
        group: xuecheng-plus-project

另外一个配置同样的。

  • server-addr指的是你的nacos地址。
  • namespace对应你在nacos上创建的命名空间。
  • group自己取,会在nacos上生成的。

最后,到管理中心查看,如下图发现两个服务:

image.png

配置管理

随着项目越做越大,配置文件变多,最后乱糟糟的,而且各种环境的切换或是数据库的变更,都需要我们去修改很多配置,加上乱会变的很麻烦。所以我们要交给nacos来对配置文件做一个统一的管理。

延续上面的配置,我们以content模块为例来介绍...
首先是为service、api子模块添加nacos的配置管理依赖,如下:

这里为什么不添加服务发现?service工程不启动http的服务往上面注册。

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

接着,在nacos配置中心配置列表新增配置,如图:

image.png 下面这些部分是要对应上的:

image.png

我们将service下的配置文件,如数据库连接、日志等放到nacos中心管理,最后的service配置文件如图:

image.png 配置中心的配置信息如图:

image.png 这里面没有日志相关的,是因为我们将日志相关的设置成了公共配置。而service本地配置文件只剩下了与nacos配置中心相连接的配置。当我们要增加其他配置,如redis、swagger等,都可以写到nacos配置中心处,这样配置文件就统一管理起来了。

关于api子模块的配置也是一样的,我们先在配置列表新增一个content-api-dev.yaml的配置文件,并将工程中bootstrap文件下除微服务配置以外的信息放入content-api-dev.yaml。本地的bootstrap文件如下;

spring:
  application:
    name: content-api
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery:
        namespace: dev148
        group: xuecheng-plus-project
      config:
        namespace: dev148
        group: xuecheng-plus-project
        file-extension: yaml
        refresh-enabled: true
        extension-configs:
          - data-id: content-service-${spring.profiles.active}.yaml
            group: xuecheng-plus-project
            refresh: true
        shared-configs:
          - data-id: swagger-${spring.profiles.active}.yaml
            group: xuecheng-plus-common
            refresh: true
          - data-id: logging-${spring.profiles.active}.yaml
            group: xuecheng-plus-common
            refresh: true

  profiles:
    active: dev

需要注意的是这一部分:

    extension-configs: 
        - data-id: content-service-${spring.profiles.active}.yaml 
          group: xuecheng-plus-project 
          refresh: true

由于api工程依赖service,显见的就是api需要用到service的数据库配置连接。我们需要用扩展配置来完成这件事。通过data-id来找到配置文件,比如content-service-dev.yaml由(content-service)-(dev).(yaml)三部分组成,应用名、环境名、后缀。后缀${spring.profiles.active}这样写的目的是可以通过改一个参数来切换我们的环境。

这篇文章要说的就这么多啦!有问题的小伙伴可以评论区留言!!!