首页 > 其他分享 >最全springcloudAlibaba视频笔记-第三章Nacos Config服务配置中心

最全springcloudAlibaba视频笔记-第三章Nacos Config服务配置中心

时间:2023-07-28 17:33:40浏览次数:35  
标签:配置文件 Config 配置 Nacos nacos provider config springcloudAlibaba

Nacos Config服务配置中心

课程视频:https://www.bilibili.com/video/BV1VW4y1o7n5 本课程使用的是目前最新版本2022.0.0.0-RC2。基于Spring Boot 3.0与JDK20的开发环境。

集群中每一台主机的配置文件都是相同的,对配置文件的更新维护就成为了一个棘手的问题。此时就出现了配置中心,将集群中每个节点的配置文件交由配置中心统一管理。相关产品很多,例如,Spring Cloud Config、Zookeeper、Apollo、Disconf(百度的,不再维护)等。但Spring Cloud Alibaba官方推荐使用Nacos作为微服务的配置中心。

3.1 常见配置中心工作原理

3.1.1 Spring Cloud Config

其存在三大问题:

  • 无法自动感知更新
  • 存在羊群效应
  • 系统架构过于复杂

3.1.2 Apollo

其Config Client可以自动感知配置文件的更新。但也存在两个不足:

  • 系统架构复杂
  • 配置文件支持类型较少,其只支持xml、text、properties,不支持json、yml。

3.1.3 Nacos Config

  • Config Client通知自动感知配置中心中相应配置文件的更新。
  • 架构简单
  • 支持的配置文件类型较多(支持JSON与YML)

3.1.4 Zookeeper

Zookeeper作为配置中心,其工作原理与前面的三种都不同。其没有第三方服务器去存储配置数据,而是将配置数据存放在自己的Znode中了。当配置中心中的配置数据发生了变更,Config Client也是可以自动感知到的(Watcher监听机制)。

3.1.5 一致性问题

配置中心中的配置数据一般都是持久化在第三方服务器的,例如DBMS、Git远程库等。由于这些配置中心Server中根本就不存放数据,所以它们的集群中就不存在数据一致性问题。但像Zookeeper,其作为配置中心,配置数据是存放在自己本地的。所以该集群中的节点是存在数据一致性问题的。Zookeeper集群对于数据一致性采用的是CP模式。 作为注册中心,这些Server集群间是存在数据一致性问题的,它们采用的模式是不同的。Zookeeper(CP)、Eureka(AP)、Consul(AP)、Nacos(默认AP,也支持CP)。

3.2 获取远程配置

这里实现的需求是,应用的配置文件不在本地,而由Nacos Config进行管理。

3.2.1 Nacos中完成配置

3.2.1.1 打开配置列表

启动Nacos,然后打开nacos页面。 Data ID用于指定在nacos config中保存的配置文件的名称。该文件可以是yml或properties,但名称必须为微服务名称。应用在启动时就是通过微服务名称在nacos config中查找相应的配置文件的。 这里要使用的配置格式为YAML。发布,返回后,就可看到如下清单了。

3.2.1.2 填写配置内容
将原来application.yml中的全部内容复制到该页面,并将原来的spring.application.name属性删除。

| server: port: 8081 spring: cloud: _# 指定nacos server地址 _nacos: discovery: server-addr: localhost:8848

jpa: generate-ddl: true show-sql: true hibernate: ddl-auto: none

_# 配置数据源 _datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql:///test?useUnicode=true&useSSL=false&characterEncoding=utf8 username: root password: 111 logging: _# 设置日志输出格式 _pattern: console: level-%level %msg%n level: root: info org.hibernate: info org.hibernate.type.descriptor.sql.BasicBinder: trace org.hibernate.type.descriptor.sql.BasicExtractor: trace com.abc.provider: debug | | --- |

3.2.2 定义提供者03-provider-nacos-config-8081

3.2.2.1 定义工程

复制02-provider-nacos-8081工程,并重命名为03-provider-nacos-config-8081。

3.2.2.2 修改pom

在pom中添加如下依赖。

| <!--nacos config依赖--><dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>

</dependency>
3.2.2.3 修改application.yml

删除原有的application.yml文件的内容,替换为如下内容。

3.2.3 关于配置文件的扩展

当前服务配置、共享配置与扩展配置的加载顺序为:共享配置,扩展配置,当前服务配置。若在三个配置中具有相同属性设置,但它们具有不同的值,那么,后加载的会将先加载的给覆盖。即这三类配置的优先级由低到高是:共享配置,扩展配置,当前服务配置 当前服务配置可以存在于三个地方: 远程配置文件:(Nacos config中) 快照文件: 本地配置文件:(主动写入的配置文件) 这三个同名文件也存在加载顺序问题,它们的加载顺序为:本地配置文件、远程配置文件、快照配置文件。只要系统加载到了配置文件,那么后面的就不再加载。

3.2.4 运行访问

启动03-provider-nacos-config-8081,页面正常访问即可。

3.3 动态更新配置

3.3.1 需求

这里要实现的需求是:从数据库中根据id查询到的depart的name值,在浏览器上显示的并不是DB中的name,而是来自于nacos的动态配置depart.name。

3.3.2 修改Nacos配置数据

直接在nacos config配置页面修改配置信息,例如添加一个depart.name属性。修改完毕后,再次发布即可。

3.3.3 修改提供者工程

直接修改03-provider-nacos-config-8081工程中的DepartServiceImpl类。 首先在需要动态更新配置数据的类上添加@RefreshScope注解,然后再添加departName属性,该属性值读取自配置文件中的depart.name属性。 为了演示配置信息的动态更新效果,再修改如下方法返回值。

3.3.4 刷新访问页面

重启应用后,刷新页面可以看到数据已经更新。然后再多次更新远程配置文件,无需重启03-provider-nacos-config-8081工程,直接刷新访问页面即可获取到更新的数据。

3.3.5 长轮询模型

Nacos Config Server中配置数据的变更,Nacos Config Client是如何知道的呢?Nacos采用的是长轮询模型。 长轮询模型整合了Push与Pull模型的优势。Client仍定时发起Pull请求,查看Server端数据是否更新。若发生了更新,则Server立即将更新数据以响应的形式Push给Client端;若没有发生更新,Server端并不向Client进行Push,而是临时性的保持住这个连接一段时间。若在此时间段内,Server端数据发生了变更,则立即将变更数据Push给Client。若仍未发生变更,则放弃这个连接。等待着下一次Client的Pull请求。 长轮询模型,是Push与Pull模型的整合,既降低了Push模型中长连接的维护问题,又降低了Push模型实时性较低的问题。

3.4 多环境选择的实现

3.4.1 什么是多环境选择

在开发应用时,通常同一套程序会被运行在多个不同的环境,例如,开发、测试、生产环境等。每个环境的数据库地址、服务器端口号等配置都会不同。若在不同环境下运行时将配置文件修改为不同内容,那么,这种做法不仅非常繁琐,而且很容易发生错误。此时就需要定义出不同的配置信息,在不同的环境中选择不同的配置。

3.4.2 新增多环境配置文件

3.4.2.1 克隆文件

在Nacos config服务器中克隆两个配置文件。 再以相同的方式克隆一个文件,最终可以看到多出了两个配置文件。 注意,多环境选择配置文件的文件名中,后面必须是-{profile}。

3.4.2.2 修改配置文件内容

分别修改两个配置文件中的depart.name属性。

3.4.3 修改应用的配置文件

修改03-provider-nacos-config -8081工程的applicatioin.yml文件。在其中添加多环境选择配置,并修改要导入的nacos配置中心中配置文件的名称格式。

3.4.4 访问

3.5 配置隔离

3.5.1 数据模型

namespace与group除了能够隔离服务外,还可以隔离配置文件。在官方的数据模型图中就可以看到。

3.5.2 定义三个provider的配置文件

在Nacos Config中定义三个03-provider-config-8081的配置文件,它们的内容几乎相同,不同的是namespace、group与port:

  • public + DEFAULT_GROUP + 8081
  • public + MY_GROUP + 8082
  • hello + MY_GROUP + 8083

3.5.3 启动三个provider

通过对03-provider-config-8081的application.yml中为spring.cloud.nacos.config下的namespace与group指定不同的值,启动三个provider,让它们加载不同namespace与group下的不同的配置文件。

3.5.4 查看Nacos配置列表

查看Nacos配置列表,在public命名空间中有两个配置文件,服务名称相同,但分组不同。 查看hello命名空间,其中也有一个配置文件,名称与public中的相同,但分组为MY_GROUP。

3.5.5 查看Nacos服务列表

查看Nacos服务列表,在public命名空间中有两个服务,服务名称相同,但分组不同。 查看hello命名空间,其中也有一个服务,服务名称与public中的相同,但分组为MY_GROUP。

3.5.6 调用provider

此时consumer调用这些provider的方式,与前面“服务隔离”时的调用方式完全相同。 修改02-consumer-nacos-8080的配置文件,指定nacos服务发现的group与namespace,就只会调用到指定范围中的服务。这就是namespace+group的服务隔离。

标签:配置文件,Config,配置,Nacos,nacos,provider,config,springcloudAlibaba
From: https://blog.51cto.com/u_12349365/6885698

相关文章

  • 数据源为postgresSQL的docker版nacos
    1.首先编写Dcokerfile,基础镜像为ubuntu:18.04,安装Java环境等FROMubuntu:18.04ENVJAVA_DIR=/usr/localENVJAVA_HOME=$JAVA_DIR/java8ENVPATH=$PATH:$JAVA_HOME/binENVNACOS_VERSION=2.2.0.1ENVNACOS_HOME=/nacos#安装jdkCOPY./jdk-8u11-linux-x64.tar.gz$JAVA......
  • @Configuration注解的作用
    @Configuration可理解为用spring的时候xml里面的<beans>标签@Bean可理解为用spring的时候xml里面的<bean>标签参考:https://blog.csdn.net/liuyinfei_java/article/details/820118051、第一种自己写的类,Controller,Service。用@controller@service即可2、第二种,集成其它框架,比......
  • ifconfig
    ifconfig配置和显示Linux系统网卡的网络参数补充说明ifconfig命令被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。语法ifconfig(参数......
  • centos7 用docker 部署 nacos集群--以mysql持久化--以nginx代理
     创建一个文件夹,把四个配置文件放进去,然后运行:dockercompose-f-dnacos.ymlupmysql-schema.sqlnacos.confnacos.envnacos.yml  mysql-schema.sql内容:/**Copyright1999-2018AlibabaGroupHoldingLtd.**LicensedundertheApacheLicense,Version2.......
  • FeignClient 动态获取nacos中的配置,线上更改后能热更新
    1.设置nacos变量在一个类中@Component@RefreshScope@ConfigurationProperties(prefix="testC")publicclassSupplierInfoRakuten{privateStringversion;publicStringgetVersion(){returnversion;}publicvoidsetVersion(Str......
  • springcloudalibaba 从入门到精通进阶学习路线?深入细化讲解
    springcloudalibaba从入门到精通进阶学习路线?深入细化讲解下面是深入细化的SpringCloudAlibaba学习路线:1.学习SpringBoot和SpringCloud基础知识:在开始学习SpringCloudAlibaba之前,你需要先掌握SpringBoot和SpringCloud的基础知识。学习SpringBoot的核心概念、注解、配......
  • 1分布式微服务技术栈-SpringCloud<Eureka,Ribbon,nacos>
    微服务技术栈一、微服务介绍了解1架构结构案例与springboot兼容关系拆分案例拆分服务拆分-服务远程调用2eureka注册中心Eureka-提供者与消费者Eureka-eureka原理分析Eureka-搭建eureka服务Eureka-服务注册Eureka-服务发现3Ribbon组件负载均衡Ribbon-负载均衡原理Ribbon-负载......
  • 记一次nacos注册中心搭建步骤(入门)
    1、下载nacos本操作步骤使用的是稳定版本2.1.1 下载地址:https://github.com/alibaba/nacos/releases/tag/2.1.1百度网盘下载地址:链接:https://pan.baidu.com/s/1w0CUkIpDJ8jI3N2FH3hKWw?pwd=af53提取码:af532、本次操作系统是linux(centos7) 上传到服务器指......
  • git config --global --add safe.directory
     克隆下源码对其操作时git报错fatal:unsaferepository并提示可以:gitconfig--global--addsafe.directory这个命令是用来将一个安全目录添加到全局的Git配置中。具体来说,它会在Git的配置文件中添加一行类似于"safe.directory=/path/to/directory"的配置项,表示......
  • 通过docker安装的jira提示We've detected a potential problem with JIRA's Dashboard
    正常通过docker安装jira后,访问是不会出问题的但是如果使用nginx代理后,就是在nginx里配置了proxy_passhttp://localhost:2800再访问后,就会报错We'vedetectedapotentialproblemwithJIRA'sDashboardconfigurationthatyouradministratorcancorrect.Clickhereto......