开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 8 天,点击查看活动详情
本篇文章带你更清晰的了解上篇的理论知识,手把手来做nacos的搭建。文章主要分为服务发现与配置管理两部分。
Nacos搭建与服务发现
先简单介绍一下小编使用的项目工程结构,看下面一张图:
- xuecheng-plus-parent是我们的父工程,简单来说所有模块都依赖它。
- content、system两个模块下都有api、service、model三个子模块。
- api模块专注于接口开发;service负责业务层;model是所有的数据模型,dto、po等等。
工程结构是这样的,不理解可以留言。
下面要开始做正事啦🚀🚀🚀
首先我们需要在父工程中导入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不填写的话会自动生成一个,这里建议自己填写。
接下来,我们打开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上生成的。
最后,到管理中心查看,如下图发现两个服务:
配置管理
随着项目越做越大,配置文件变多,最后乱糟糟的,而且各种环境的切换或是数据库的变更,都需要我们去修改很多配置,加上乱会变的很麻烦。所以我们要交给nacos来对配置文件做一个统一的管理。
延续上面的配置,我们以content模块为例来介绍...
首先是为service、api子模块添加nacos的配置管理依赖,如下:
这里为什么不添加服务发现?service工程不启动http的服务往上面注册。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
接着,在nacos配置中心配置列表新增配置,如图:
下面这些部分是要对应上的:
我们将service下的配置文件,如数据库连接、日志等放到nacos中心管理,最后的service配置文件如图:
配置中心的配置信息如图:
这里面没有日志相关的,是因为我们将日志相关的设置成了公共配置。而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}这样写的目的是可以通过改一个参数来切换我们的环境。
这篇文章要说的就这么多啦!有问题的小伙伴可以评论区留言!!!