• SpringCloudNetflix(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,所以需要指定相关版本)

           <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
                <version>2.2.6.RELEASE</version>
            </dependency>
    View Code

     在application中指定nacos的地址

    spring.cloud.nacos.server-addr=192.168.43.5:8848
    View Code

    在使用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中配置文件类型,和环境名称即可

    spring.cloud.nacos.config.file-extension=yaml
    
    spring.profiles.active=dev
    View Code

    扩展配置和共享配置

    有时候多个微服务节点可能有些配置是相同的(比如监控、日志等 ),nacos可以实现多个微服务共享同一份配置,我们在nacos中维护,然后在bootstrap中指定即可。

    spring.cloud.nacos.config.extension-configs[1].data-id=actuator.yaml
    spring.cloud.nacos.config.extension-configs[1].refresh=true
    View Code

    :共享和扩展只是配置的时候名称不一样。上面的配置是扩展,共享只用把extension修改成shared即可

    相关功能

    【持久化】:

    默认使用derby数据库进行持久化数据储存

     我们可以把它修改成mysql进行存储(因为它是一个SpringBoot的项目,所以我们修改它的配置文件即可)

    把关于mysql的配置全都打开,并且填写我们自己的mysql服务地址

     然后使用它的mysql脚本生成对应的nacos数据集,重启nacos后,新增的数据就会存储在mysql中,但是老的数据就不见了。这点需要注意。

    【配置信息的同步】:

    使用长轮询:
    • 客户端每隔一段时间发送一个请求到服务端,服务端持有请求放在一个队列中,这个队列中存储的是所有向服务端要获取配置的会话。
    • 当nacos上的配置更改之后,会发布一个事件,然后有一个接口监听到这个事件后,轮询持有请求的队列并且向他们返回请求。他们之间的持有时间是30s

    【集群中数据同步】

    nacos集群是一个没有中心节点的集群,因为他底层可以依赖mysql,所有也就没有数据的同步这些问题了。但是他不是直接从mysql中读取数据的,而是从自己的缓存中读取的数据,这些缓存中的数据是每间隔6个小时把mysql上的数据,同步到本地的磁盘,缓存的存储的位置在:

     因为是nacos集群,客户端可能随机到某个节点上,所以当通过一个节点修改了某个数据后,那个节点则会发送http请求给其他的节点,然后其他的节点则会去mysql中从新获取一次数据,填充到自己的缓存中。而数据更新的时候是先更新数据库,然后更新磁盘。

    注:

    集群搭建非常简单,因为他是一个SpringBoot的项目,直接给他复制若干份,修改端口即可,并且在维护cluster的文件中,维护一下他们的地址即可。这里不演示了。

  • 相关阅读:
    linq to entity之字符串比较
    linq to entity 分页方法不支持LastOrDefault等操作的处理办法
    easyui蛋疼之二 tabs与accordion
    根据下拉框生成控件列表
    第一个flash AS代码
    250多个Jquery各式各样的插件
    对用户控件的访问方式重写
    WP7之Slider绑定textblock设置字体大小
    辉南三角龙湾
    回到正轨
  • 原文地址:https://www.cnblogs.com/UpGx/p/15760098.html
Copyright © 2020-2023  润新知