浅谈Spring Cloud:Nacos的配置
Nacos,一个更易于构建云原生应用的动态服务发现,配置管理和服务管理平台。所以Nacos是⼀个注册中心组件,但它又不仅仅是注册中心组件。
目录
安装
注册
负载均衡
环境隔离
配置管理
搭建集群
安装
在官网下载好安装包解压后,在cmd中通过 startup.cmd -m standalone 可以启动Nacos,并且作为单机模式启动(此处如果直接双击cmd文件会导致启动方式为集群)。Nacos的默认端口为8848。
并且可以访问到Nacos的网站。
注册
Nacos注册大部分和Eureka差不多,只需要改几个配置文件就行了。在父文件的xm中,只配置了springboot的依赖,没有配置springcloud的依赖,所以还需要重新配cloud:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
并且在每个子文件的xml中,需要把Nacos的依赖引入。
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
再在yml中修改端口号:
在网页中,服务列表就能看到配置了。
负载均衡
实际环境中,Nacos可能会分布在多个集群中,Nacos支持多种负载均衡策略。
微服务在进行访问时,应优先考虑访问同一机房的实例。如果同一机房内的实例不可用,那么再考虑访问其他机房的实例。例如,如果`order-service`部署在上海机房,而`product-service`在北京和上海机房都有部署,我们希望能够优先访问上海机房的实例。如果上海机房没有可用的实例,或者实例不可用,那么再访问北京机房的实例。通常情况下,因为同一个机房的机器属于同一个局域网,局域网内的访问速度会更快一些。
配置集群
在IDEA中,先修改配置文件。修改成shanghai集群之后,启动UserApplication1和UserApplication2;再修改集群成北京,启动UserApplication3。
此时就可以配置好集群为北京和上海集群。在默认的情况下,我们请求是会随机来请求的
要想做到北京的请求主要访问北京集群、上海的请求主要访问上海集群,我们还需要配置一些东西。
开启负载均衡策略
什么都不做的情况下,我们请求是不会来优先选择本地集群的。
在配置文件中开启loadbalancer,我们多次请求接口的时候,此时就优先访问本集群的机器。如果本集群的机器下线或者访问失败,则再会访问别的集群。
并且可以在Nacos的网页中设置权重,如果一个节点的权重为0.1,另一个为1,那么这两个节点被访问到的概率比就是1:10。(权重为0就说明完全不会访问到)
环境隔离
企业开发中,一个服务会分为开发环境、测试环境和生产环境。
- 开发环境:开发人员用于开发的服务器,是最基础的环境。一般日志级别设置较低,可能会开启一些调试信息。
- 测试环境:测试人员用来进行测试的服务器,是开发环境到生产环境的过渡环境。
- 生产环境:正式提供对外服务的环境,通常关掉调试信息。
通常情况下,这几个环境是不能互相通信的。Nacos提供了namespace(命名空间)来实现环境的隔离,不同的namaspace的服务不可见。
在服务列表中可以看到只有一个public空间。
在命名空间可以新建,新建后会出现uid。
拿着这个uid放到order的配置文件中,order-service就会被分配到这个空间中。
配置管理
除了注册中心和负载均衡之外,Nacos 还是一个配置中心,具备配置管理的功能。
Namespace 的常用场景之一是不同环境的配置区分隔离。例如,开发测试环境和生产环境的配置隔离。
当前项目的配置都在代码中,会存在以下问题:
- 配置文件修改时,服务需要重新部署。微服务架构中,一个服务可能有成百个实例,挨个部署比较麻烦,且容易出错。
- 多人开发时,配置文件可能需要经常修改,使用同一个配置文件容易冲突。
配置中心就是对这些配置项进行统一管理。通过配置中心,可以集中查看、修改和删除配置,无需再逐个修改配置文件。提高效率的同时,也降低了出错的风险。
配置获取的步骤:
本来只需要读取本地配置文件,但是现在需要读取nacos中的配置文件。之前nacos的信息都在本地配置文件中,现在还没访问到本地,就需要访问nacos的配置文件,去哪里访问?
spring提供了一个bootstrap.yml,这个优先级比较高,在项目启动的时候就可以读取到。
在pom和bootstrap文件中配置好,这样就完成了配置。
在Controller中,我们添加@Value注解,可以在Controller中添加,在网页中可以看到效果。
至此,我们就完成了配置的统一管理。
再添加@RefreshScope,可以完成服务的热部署,Nacos中更新的配置会自动在服务器更新。
另一种自动更新的方式:通过ConfigurationProperties注入,自动刷新,无需@RefreshScope
多服务共享配置
在Nacos中,以userservice为例子,服务名-profile.yaml > 服务名称.yaml > 本地配置
搭建集群
搭建数据库
配置好数据库后,进行下一步操作
配置nacos
此处我们把nacos文件夹复制三份,分别命名为nacos1,nacos2,nacos3
把里面的配置文件配置好,端口号设置为8845 8846 8847
启动nacos集群
nginx反向代理
集群搭建步骤:
- 搭建MySQL集群并初始化数据库表
- 下载解压nacos
- 修改集群配置(节点信息)、数据库配置
- 分别启动多个nacos节点
- nginx反向代理