SpringCloud-Netflix(Usage of Nacos-配置中心)
SpringCloud-Netflix(Usage of Nacos-配置中心)
随着微服务的数量增多,当我们需要修改微服务配置的时候,会觉得十分繁琐,从而可能导致一定概率上的修改错误。而且配置文件是对项目十分重要的东西之一,一旦修改错误,有可能造成一些严重的问题。所以Nacos的出现就就等于解决了这些问题,它相当于一个容器,把所有的微服务的配置文件放在一个地方进行可视化统一管理,Nacos和各个微服务进行关联,一旦Nacos上对应的微服务的配置修改,对应的微服务的配置也相应修改。他主要提供两个功能
- 服务注册与发现
- 配置管理
因为我们是从springcloud netflix这套开始聊的,关于它的服务注册与发现的功能,我想在后面和大家聊SpringCloud-Alibaba的时候再聊(因为其实总的来说,nacos是国产的,刚好咱们阿里的这套一起聊比较合适)
Usage of Nacos(Embedded SpringCloud)
两种方式启动nacos,
- 1. 直接启动他的源码,他是一个springBoot项目。
- 2. 解压nacos,进入到他的bin中,然后使用startup脚本进行启动。【./startup.sh -m standalone】,默认端口8848,控制台输入即可访问,默认账号密码都是nacos
- 直接在浏览器中输入启动后打印的地址就行(Console后面的)
我们这里的nacos的版本使用1.4.2(这个版本还是比较稳定的).
引入nacos的pom(因为我们是在Netflix中使用Alibaba的nacos,所以需要指定相关版本)
View Code<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2.2.6.RELEASE</version> </dependency>在application中指定nacos的地址
View Codespring.cloud.nacos.server-addr=192.168.43.5:8848在使用nacos中的配置的类上加上【@RefreshScope】,并且创建一个和我们注册到eureka中的微服务的名称一样的dataId。然后选择配置文件的类型,我们这里选择properties的类型,并且维护了一个switch的属性。
如果,我们想先加载nacos中的配置的话,或者有一些配置我们想优先加载的话,我们可以创建一个bootstrap.properties文件,然后把nacos的地址维护进去。这样就会优先加载nacos的上的配置了。
在程序中,直接使用@Value的注解,就可以获取nacos上的配置文件。
多环境配置
通常我们针对不同环境有不同的配置。比如没有nacos之前我们是创建不同的文件然后通过(-***)进行区分的比如(application-dev和application-prd),然后在bootstrap.properties中使用(spring.profiles.active=dev)指定使用相关的配置文件。在SpringCloud使用nacos的情况下,我们可以这样做:
nacos中的多环境命名规则为:${prefix}-${spring.profiles.active}.${file.extension}
${prefix}=${spring.application.name}
${spring.profiles.active}=我们的环境名称
${file-extension}=【properties/yaml】
我们在bootstrap中配置文件类型,和环境名称即可
View Codespring.cloud.nacos.config.file-extension=yaml spring.profiles.active=dev
扩展配置和共享配置
有时候多个微服务节点可能有些配置是相同的(比如监控、日志等 ),nacos可以实现多个微服务共享同一份配置,我们在nacos中维护,然后在bootstrap中指定即可。
View Codespring.cloud.nacos.config.extension-configs[1].data-id=actuator.yaml spring.cloud.nacos.config.extension-configs[1].refresh=true注:共享和扩展只是配置的时候名称不一样。上面的配置是扩展,共享只用把extension修改成shared即可
相关功能
【持久化】:
默认使用derby数据库进行持久化数据储存
我们可以把它修改成mysql进行存储(因为它是一个SpringBoot的项目,所以我们修改它的配置文件即可)
把关于mysql的配置全都打开,并且填写我们自己的mysql服务地址
然后使用它的mysql脚本生成对应的nacos数据集,重启nacos后,新增的数据就会存储在mysql中,但是老的数据就不见了。这点需要注意。
【配置信息的同步】:
使用长轮询:
- 客户端每隔一段时间发送一个请求到服务端,服务端持有请求放在一个队列中,这个队列中存储的是所有向服务端要获取配置的会话。
- 当nacos上的配置更改之后,会发布一个事件,然后有一个接口监听到这个事件后,轮询持有请求的队列并且向他们返回请求。他们之间的持有时间是30s
【集群中数据同步】
nacos集群是一个没有中心节点的集群,因为他底层可以依赖mysql,所有也就没有数据的同步这些问题了。但是他不是直接从mysql中读取数据的,而是从自己的缓存中读取的数据,这些缓存中的数据是每间隔6个小时把mysql上的数据,同步到本地的磁盘,缓存的存储的位置在:
因为是nacos集群,客户端可能随机到某个节点上,所以当通过一个节点修改了某个数据后,那个节点则会发送http请求给其他的节点,然后其他的节点则会去mysql中从新获取一次数据,填充到自己的缓存中。而数据更新的时候是先更新数据库,然后更新磁盘。
注:
集群搭建非常简单,因为他是一个SpringBoot的项目,直接给他复制若干份,修改端口即可,并且在维护cluster的文件中,维护一下他们的地址即可。这里不演示了。