安装和下载
下载地址:Releases · alibaba/nacos · GitHub
windows版本的,不需要安装,下载好直接解压,然后到bin目录下,执行
startup.cmd -m standalone
启动即可。
注册成Windows服务(不注册也能用)
- 插件下载
地址:Releases · winsw/winsw · GitHub
- 将set MODE改为 standalone
- 配置文件和插件安装
在nacos文件夹的bin目录下创建nacos-service.xml文件(文件名根据自己想要的名称更改)
xml配置文件。logpath路径、executable路径、stopexecutable路径,根据自己的路径填写
<?xml version="1.0" encoding="UTF-8" ?>
<service>
<id>nacos</id>
<name>Nacos Service</name>
<description>Nacos-service</description>
<logpath>D:\application\nacos\bin\logs\</logpath>
<logmode>roll</logmode>
<executable>D:\application\nacos\bin\startup.cmd</executable>
<stopexecutable>D:\application\nacos\bin\shutdown.cmd</stopexecutable>
</service>
- 将刚刚下载的WinSW-x64.exe插件移动到nacos解压目录的bin目录下
- 改名为:nacos-service.exe(根据自己设置的xml文件名而定)
- 在bin目录下输入cmd,打开命令行,输入:nacos-service.exe install (前面根据文件名而定)
- 在cmd命令行输入:net start nacos,启动服务
搭建Nacos
服务发现中心
- 在搭建Nacos服务发现中心之前需要搞清楚两个概念:namespace 和 group
- namespace:用于区分环境、比如:开发环境、测试环境、生产环境
- group:用于区分项目,比如:project项目,asset项目
- 首先在nacos配置namespace
- 启动nacos访问nacos登录
- 点击左侧菜单进入命名空间,新建命名空间
命名空间ID相当于ymal配置文件中对应的namespace
创建成功如下
- 服务注册到Nacos
- 在pom文件中添加服务注册和发现的依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2021.0.4.0</version>
</dependency>
- 在服务的配置文件中配置
#微服务配置
spring:
application:
name: system-service
cloud:
nacos:
server-addr: 192.168.101.65:8848
discovery:
namespace: dev
group: xuecheng-plus-project
- 重启服务。待微服务重启成功,进入naacos服务查看服务列表
- 点击详情可以查看微服务实例地址
配置中心
搭建完成Nacos服务发现中心,下边搭建Nacos为配置中心,其目的就是通过Nacos去管理项目的所有配置。
先将项目中的配置文件分分类:
1、每个项目特有的配置
是指该配置只在有些项目中需要配置,或者该配置在每个项目中配置的值不同。
比如:spring.application.name每个项目都需要配置但值不一样,以及有些项目需要连接数据库而有些项目不需要,有些项目需要配置消息队列而有些项目不需要。
2、项目所公用的配置
是指在若干项目中配置内容相同的配置。比如:redis的配置,很多项目用的同一套redis服务所以配置也一样。
另外还需要知道nacos如何去定位一个具体的配置文件,即:namespace、group、dataid.
1、通过namespace、group找到具体的环境和具体的项目。
2、通过dataid找到具体的配置文件,dataid有三部分组成
比如:content-service-dev.yaml配置文件 由(content-service)-(dev). (yaml)三部分组成
content-service:第一部分,它是在application.yaml中配置的应用名,即spring.application.name的值。
dev:第二部分,它是环境名,通过spring.profiles.active指定,
Yaml: 第三部分,它是配置文件 的后缀,目前nacos支持properties、yaml等格式类型,本项目选择yaml格式类型。
所以,如果我们要配置content-service工程的配置文件:
在开发环境中配置content-service-dev.yaml
在测试环境中配置content-service-test.yaml
在生产环境中配置content-service-prod.yaml
我们启动项目中传入spring.profiles.active的参数决定引用哪个环境的配置文件,例如:传入spring.profiles.active=dev表示使用dev环境的配置文件即content-service-dev.yaml。
示例
下边以开发环境为例对content-service工程的配置文件进行配置,进入nacos,进入开发环境。
点击加号,添加一个配置
输入data id、group以及配置文件内容。
为什么没在nacos中配置下边的内容 ?
YAML |
因为刚才说了dataid第一部分就是spring.application.name,nacos 客户端要根据此值确定配置文件 名称,所以spring.application.name不在nacos中配置,而是要在工程的本地进行配置。
在content-service工程的test/resources 中添加bootstrap.yaml,内容如下:
YAML |
在内容管理模块的接口工程和service工程配置依赖:
XML |
公用配置
还有一个优化的点是如何在nacos中配置项目的公用配置呢?
nacos提供了shared-configs可以引入公用配置。
在content-api中配置了swagger,所有的接口工程 都需要配置swagger,这里就可以将swagger的配置定义为一个公用配置,哪个项目用引入即可。
单独在xuecheng-plus-common分组下创建xuecheng-plus的公用配置,进入nacos的开发环境,添加swagger-dev.yaml公用配置
删除接口工程中对swagger的配置。
项目使用shared-configs可以引入公用配置。在接口工程的本地配置文件 中引入公用配置,如下:
YAML |
再以相同 的方法配置日志的公用配置。
在接口工程和业务工程,引入loggin-dev.yaml公用配置文件
配置优先级
微服务的配置统一在nacos进行配置,用到的配置文件有本地的配置文件 bootstrap.yaml和nacos上的配置文件,SpringBoot读取配置文件 的顺序如下:
引入配置文件的形式有:
1、以项目应用名方式引入
2、以扩展配置文件方式引入
3、以共享配置文件 方式引入
4、本地配置文件
各配置文件 的优先级:项目应用名配置文件 > 扩展配置文件 > 共享配置文件 > 本地配置文件。
有时候我们在测试程序时直接在本地加一个配置进行测试,比如下边的例子:
我们想启动两个内容管理微服务,此时需要在本地指定不同的端口,通过VM Options参数,在IDEA配置启动参数
通过-D指定参数名和参数值,参数名即在bootstrap.yml中配置的server.port。
启动ContentApplication2,发现端口仍然是63040,这说明本地的配置没有生效。
这时我们想让本地最优先,可以在nacos配置文件 中配置如下即可实现:
YAML |
再次启动ContentApplication2,端口为63041。