nacos入门(配置管理篇)
目录
内容有点多,所以分为两期,建议先看一下哔哩哔哩的教学视频,这个可以收藏当笔记,资源来自于黑马
首先要知道什么是nacos:nacos是一个阿里开元的一个项目,用于微服务的服务发现和微服务的配置管理。
安装nacos,可以搞一个虚拟机使用docker来安装,或者是本地安装,使用命令符。
1.配置管理
1.1 什么是配置
应用程序在启动和运行的时候往往需要读取一些配置信息,配置基本上伴随着应用程序的整个生命周期,比如:数据库连接参数、启动参数等。
大家搞过springboot项目的肯定都知道项目里面会配置一些信息,比如项目的端口信息数据库连接的信息,或者是日志的一些信息,这里就不具体说明了
1.2 什么是配置中心
在微服务架构中,当系统从一个单体应用,被拆分成分布式系统上一个个服务节点后,配置文件也必须跟着迁移(分割),这样配置就分散了,不仅如此,分散中还包含着冗余。
简单的来说微服务就是把之前的一个个功能拆分出来,形成一个独立的模块,这样的话后面再进行业务扩展的时候可以不用重启所有的服务器,可以做到只修改一个模块的内容,然后这个这个模块的后面就跟了一个配置文件,作为自己独立的配置信息。而你的微服务在nacos里面注册之后就可以通过namespace(后面会讲) 和group(后面会讲) 以及data_id来定位你的配置文件。
再简单的说,就是你在nacos配置中心写好配置文件后然后可以通过一些信息来定位到这个文件,然后读取,就是这么简单。
2.nacos的了解
2.1主流配置中心的一个对比
先来看一下现在市面上的一些微服务配置管理的一些组件
这个图是黑马的,如果这些组件你了解的话那么这里面的东西你肯定都知道,但是如果你不了解的话那么就算是看了一遍,也会很快忘掉。
可以不用看。
总结一下:nacos很棒,现在市面上使用较多的就是nacos和Apollo这两个组件,具体学哪个看自己公司用的哪个。
后面的话我会把apollo这个组件也整理出来。
2.2.nacos简介
Nacos致力于帮助您发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,帮助您实现动态服务发现、服务配置管理、服务及流量管理。Nacos帮助您更敏捷和容易地构建、交付和管理微服务平台,Nacos是构建以“服务”为中心的现代应用架构的服务基础设施。
随便看一下就好了,建议学完之后再回来看,会有不一样的感受。
2.3.nacos的特性
Nacos四大的功能
1,服务发现与服务健康检查:Nacos使服务更容易注册,并通过DNS或HTTP接口发现其他服务,Nacos还提供服务的实时健康检查,以防止向不健康的主机或服务实例发送请求。
2,动态配置管理:动态配置服务允许您在所有环境中以集中和动态的方式管理所有服务的配置。Nacos消除了在更新配置时重新部署应用程序,这使配置的更改更加高效和灵活。
3.动态DNS服务:Nacos提供基于DNS协议的服务发现能力,旨在支持异构语言的服务发现,支持将注册在Nacos上的服务以域名的方式暴露端点,让三方应用方便的查阅及发现。
4.服务和元数据管理:Nacos能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略。
3.Nacos快速入门
3.1安装NacosServer
3.1.1预备环境准备
Nacos依赖Java环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置Maven环境,请确保是在以下版本环境中安装使用:
1.64bitOS,支持Linux/Unix/Mac/Windows,推荐选用Linux/Unix/Mac。
2.64bitJDK1.8+;下载&配置。
3.Maven3.2.x+;下载&配置。
3.1.2下载源码或者安装包
这一块需要动手操作,建议去哔站找个视频看一下,很简单,这里就不过多赘述了。
3.1.3.外部mysql数据库支持
安装好之后为了更加方便修改里面的用户信息和用户密码之类的东西可以连接一下你自己使用的一个数据库
单机模式时nacos默认使用嵌入式数据库实现数据的存储,若想使用外部mysql存储nacos数据,需要进行以下步骤:
1.安装数据库,版本要求:5.6.5+ ,mysql 8 以下
2.初始化mysql数据库,新建数据库nacos_confifig,数据库初始化文件:${nacoshome}/conf/nacosmysql.sql
- 修改${nacoshome}/conf/application.properties文件,增加支持mysql数据源配置
这个文件具体修改的是,你自己的数据库的一些信息,比如密码和用户名,以及数据库名,只要搞过MySQL连接的应该一看就明白
3.2功能了解
3.2.1 发布配置
首先在nacos发布配置。
浏览器访问 http://127.0.0.1:8848/nacos ,打开nacos控制台,并点击菜单配置管理->配置列表:
在Nacos添加如下的配置:
第一步:点击新增配置
第二步:配置信息
第三步:发布配置
第四步:查询配置
3.2.2 nacos客户端获取配置
大致流程:首先我们要创建一个项目,然后可以通过nacos的客户端api来获取配置信息
1:首先我们需要创建一个maven的项目
名字随意
2:我们想要使用nacos的客户端工具的话就要导包
剩下的就是通过代码来获取配置信息
之前提到过通过namespace(后面会讲) 和group(后面会讲) 以及data_id来定位你的配置文件
这里的namespace采用的是默认的public的所有可以不用写,具体后面会讲到。
4 Nacos配置管理基础应用
4.1 Nacos配置管理模型
对于Nacos配置管理,之前提到过通过Namespace、group、Data ID能够定位到一个配置集(这里的说的配置集就是一个配置文件)
这个是nacos的层级
4.1.1这里有一些概念需要看一下
配置集(Data ID)
在系统中,一个配置文件通常就是一个配置集,一个配置集可以包含了系统的各种配置信息,例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。每个配置集都可以定义一个有意义的名称,就是配置集的ID即DataID。
配置项
配置集中包含的一个个配置内容就是配置项。它代表一个具体的可配置的参数与其值域,通常以 key=value 的形式存在。例如我们常配置系统的日志输出级别(logLevel=INFO|WARN|ERROR)
就是一个配置项。
配置分组(Group)
配置分组是对配置集进行分组,通过一个有意义的字符串(如 Buy 或 Trade )来表示,不同的配置分组下可以有相同的配置集(Data ID)。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默
认采用 DEFAULT_GROUP 。配置分组的常见场景:可用于区分不同的项目或应用,例如:学生管理系统的配置集可以定义一个group为:STUDENT_GROUP。
命名空间(Namespace)
命名空间(namespace)可用于进行不同环境的配置隔离。例如可以隔离开发环境、测试环境和生产环境,因为它们的配置可能各不相同,或者是隔离不同的用户,不同的开发人员使用同一个nacos管理各自的配置,可通过 namespace隔离。不同的命名空间下,可以存在相同名称的配置分组(Group) 或 配置集。
简答的来说
Namespace:代表不同环境,如开发、测试、生产环境。
Group:代表某项目,如XX医疗项目、XX电商项目
DataId:每个项目下往往有若干个工程,每个配置集(DataId)是一个工程的主配置文件
获取配置集需要指定
1、nacos服务地址,必须指定
2、namespace,如不指定默认public
3、group,如不指定默认 DEFAULT_GROUP
4、dataId,必须指定
下面再看之前的代码应该就很清楚了
4.2 配置管理
这一块具体讲一下nacos的一些配置功能
4.2.1 配置列表
多配置格式编辑器
Nacos支持 YAML、Properties、TEXT、JSON、XML、HTML 等常见配置格式在线编辑、使用最多的还是yaml格式的文件,个人感觉这种格式的额文件比较简洁
这里的nacos在更改配置时支持一种diff的能力,就是可以对比你的内容和之前修改前有哪些不同
配置集的导出,这个是压缩包
点击右上角的 导入配置 ,可选择导出的压缩包文件,将压缩包内的文件恢复为nacos配置集
4.2.2 历史版本
在历史版本的选项里面可以通过Data_id和group来定位到具体一些配置信息,可以通过查看更改时间来进行回滚操作,还是很方便的。
5.1 分布式应用配置管理
用户通过Nacos Server的控制台集中对多个服务的配置进行管理。
各服务统一从Nacos Server中获取各自的配置,并监听配置的变化。
5.微服务的配置管理
5.1.1 发布配置
首先在nacos发布配置,我们规划了两个服务service1、service2,并且想对这两个服务的配置进行集中维护。浏览器访问 http://127.0.0.1:8848/nacos ,打开nacos控制台,并点击菜单配置管理->配置列表:在Nacos添加如下的配置: service1
表:在Nacos添加如下的配置: service2
这是两个nacos配置文件里面的内容
5.1.2 创建父工程
我们将演示如何使用 Spring Cloud Alibaba Nacos Confifig在Spring Cloud应用中集成Nacos,通过
Spring cloud原生方式快捷的获取配置内容。
5.1.3新建项目service1
添基本依赖
注意:一定要在bootstrap.yaml里面,如果放到application.yaml里面的话就会加载不到文件,因为nacos里面配置文件的优先级比application.yaml高,所以先找nacos里面的配置文件,但是因为你没有在里面配置nacos的地址信息,所以会找不到nacos配置文件,bootstrap.yaml这个文件优先级比nacos里面的优先级高,所以可以解决这个问题,还有一定要导入nacos-config依赖配置才会生效
- bootstrap.yml配置
经过之前的学习这个配置是能够看懂的。
还记得在前咱们说过的定位配置集的方法,group和namespace都有了,但是还缺data_id,那么这个data_id在哪呢,这个是组合出来的,根据spring:application:name这个名字和file-extension这个文件拓展名来组合出来的名字,看咱们之前的nacos配置文件,刚好是这个名字。
service2参考service1来进行书写吧
(3)启动配置客户端
新增Spring Boot 启动类,并增加获取配置的web访问端点/confifigs,通过标准的spring @Value 方式。
5.2.1支持配置的动态更新
基于上面快速上手的例子,若要实现配置的动态更新,只需要进行如下改造:
5.2.2自定义 namespace与group配置
支持自定义 namespace的配置
在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下,默认使用的是 Nacos 上 Public 这个namespace。如果需要使用自定义的命名空间,可以通过以下配置来实现:
5.2.3支持自定义 Group 的配置
在没有明确指定 ${spring.cloud.nacos.config.group} 配置的情况下,默认使用的是 DEFAULT_GROUP 。如果需要自定义自己的 Group,可以通过以下配置来实现:
:该配置必须放在 bootstrap.properties 文件中。并且在添加配置时 Group 的值一定要和spring.cloud.nacos.config.group 的配置值一致
5.2.4 自定义扩展的 Data Id 配置
Spring Cloud Alibaba Nacos Confifig可支持自定义 Data Id 的配置。 一个完整的配置案例如下所示:
下边我们在service2微服务下配置扩展。
通过自定义扩展的 Data Id 配置,既可以解决多个应用间配置共享的问题,又可以支持一个应用有多个配置文件。
5.2.5 自定义共享 Data Id 配置
为了更加清晰的在多个应用间配置共享的 Data Id ,你可以通过以下的方式来配置:
5.2.6 配置的优先级
Spring Cloud Alibaba Nacos Confifig 目前提供了三种配置能力从 Nacos 拉取相关的配置。
A: 通过 spring.cloud.nacos.config.shared-dataids 支持多个共享 Data Id 的配置
B: 通过 spring.cloud.nacos.config.ext-config[n].data-id 的方式支持多个扩展 Data Id 的配置,多个Data Id 同时配置时,他的优先级关系是 spring.cloud.nacos.config.ext-config[n].data-id 其中 n 的值越大,优先级越高。
C: 通过内部相关规则(应用名、扩展名 )自动生成相关的 Data Id 配置
当三种方式共同使用时,他们的一个优先级关系是:C > B >A
内容有点多,所以分为两期,建议先看一下哔哩哔哩的教学视频,这个可以收藏当笔记,资源来自于黑马