nacos 配置管理中心 -- 小白学习教程

本贴最后更新于 2273 天前,其中的信息可能已经天翻地覆

学习于:https://nacos.io/zh-cn/docs/what-is-nacos.html 潘孝哥
小贷最近要迁移到新框架上,所以我来尝试一波 nacos.

首先看它的作用:用来配置参数的,就比如我们通常在 properties 文件中写的

dubbo.protocol.id = dubbo

dubbo.protocol.name = dubbo
#dubbo.protocol.port = 20882
#RegistryConfig Bean
dubbo.registry.id = lls-nacos-sample-service-registry
dubbo.registry.address = nacos://172.16.90.191:8848
dubbo.registry.parameters.namespace = 59b4250f-e36f-46f8-938d-20a5b295c63e
dubbo.metadata-report.address = nacos://172.16.90.191:8848
dubbo.metadata-report.parameters.namespace = c69d33cb-2e87-4b29-8383-3ce4059e6096

这些东西都是可以在 nacos 中进行配置。这样的话,本地就不需要存储大多数的配置参数了。
nacos 的优势:
1.最重要的优势:动态修改属性值。
2.方便控制多个服务的共享属性值和私有属性值
3.去掉了很多的配置文件,而且易于搭载在各种系统中,如 spring,springboot.

后面来慢慢讲解这些优势:
先来个最基本的理解:我们要取值的时候,一般从 3 个地方取,一个是启动参数 -D ,第二个是 xml 文件,第三个是 properties 文件。 现在我们多了一个地方,就是 nacos 服务器。
这个-D 是比较牛逼的,无论你 nacos 上的初始值是啥,只要-D 上的和你一样,那么刚开始就要以- D 上的为准。不过,如果之后你在 nacos 上再进行发布,那么就算你是-D,也要乖乖听我号令。这样就充分保证了 nacos 的霸主地位(经过实验验证,这里要注意啊,你在 nacos 上发布得要经过修改后发布啊,原模原样发布无法改变!只要字符串没发生变化,发布就无法改变值
然后到 properties 文件,这个和-D 的实验现象一致。
然后-D 的优先级高于 properties 文件的优先级。
至于 xml 文件的,这个应该是定一个 xml 文件,然后 properties 标签定义几个值即可测试,但是我一致没找到它的 xml 文件声明,大家有机会的可以试试。

然后是基本的使用了:
这个主要参考 nacos 的官方文档即可。无论你是 spring 还是 springboot 项目都是可以轻轻松松搭载上去。

这里对一些东西做理解:
以潘孝哥的 demo 为例:
image.png
由于 properties 文件默认被 spring boot 加载,然后首先读取的就是这些配置。这个是用来连接 nacos 服务器的。第一个是服务器地址,第二个是连接的命名空间的标识符。
image.png
也就是在命名空间里就进行了区分。这个存储空间就第一个分隔开来。

然后是第二个:启动类上的配置:
image.png
这里的 dataid 就是前面命名空间里的一个存储空间。
image.png
这里又进行了一次数据存储区域的划分。这就表示你这个启动类要使用的是那个 dataid 里面的数据。

所以现在大概的启动流程是这样的:
启动先读取 nacos 连接的配置,然后连接到相应的命名空间,然后再根据启动类的 dataid 设置,确认此服务连接的是那个 dataid 的数据。然后这里注意后面的 after 标签,apply-service 的 after 为 common,也就是说优先级是 comon 的高,所以 comon 和 apply-service 中有相同的数据时,以 comon 的为准。这个从潘孝哥的测试数据也可以的得知。

然后就看使用:
image.png
这里也支持 spring 原生注解 value 的使用,不过它默认的是不会自动刷新,而上面的 nacosvalue 则配置有 autofresh=true,也就是说 nacos 上刷新,则这里的值也会改变。

这里注意的是,第二个 demovalue 只会在启动时读取一次配置中的 demovalue 的值,后面都不会再改变。

嗯,大概就是这样的一个使用过程。然后看潘孝哥的设计,猜测是以后可以将大部分的配置都放在 nacos 上,这样就非常有利于开发。可以一个服务连接多哥 dataid,然后设置公共的 data(比如 dubbo 的配置之类的,几个服务使用的 dubbo 配置都是一样的),然后再设置私有的。 这里还可以方面的设置优先级,调控起来非常好。

因为它可以动态修改属性值,而不需要修改配置文件,修改配置文件的话,要使 properties 文件生效,则需要重启服务,这样就很麻烦。 而再比如最原始的,把属性值直接定义在 Java 文件中,用 static final 修饰,这是一种更不可取的行为,因为此时如果要修改的话,就需要改代码了,改代码就意味着要上版本,就变得更麻烦(虽然目前我还不太懂具体麻烦在哪)。

这就是 nacos 的优势所在。

然后分享一个测试结果:就是我一个系统中,有一个服务是老系统的,一个服务改造成 springboot 了。springboot 直接按前面的方式使用即可。老系统本来以为无望迁移了,后来发现里面有 spring 可以和 nacos 用,然后就分别使用两种方式搭载 nacos,spring 的是配置类加注解即可。 然后两个服务之间公共的子包则可以直接在 pom 文件中引入,然后要使用的地方直接加 nacos 注解即可,这里就不用连接注册中心了,因为启动的是服务类。

这里有一个小小的调试手段,就是在 nacos server 这里怎么看有谁连接进到哪个 dataid 了。我没发现像 mq 那样的管理界面,只发现有个
image.png
监听查询。这里输入前面的 dataid 和默认的 group 就可以查哪个连接进来了。如果没有连接进来的就为空。

nacos 的配置中心管理功能基本使用就是这样了。它还有注册中心的功能,以后有需要使用再去学习。非常感谢潘孝哥的指点。
欢迎大家交流讨论。

  • Nacos
    23 引用 • 4 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    110 引用 • 153 回帖
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 72 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 7 关注
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 28 关注
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖 • 1 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    950 引用 • 1460 回帖 • 2 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    85 引用 • 324 回帖
  • 电影

    这是一个不能说的秘密。

    125 引用 • 610 回帖
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 123 关注
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    16 引用 • 236 回帖 • 224 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3206 引用 • 8217 回帖
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    386 引用 • 1892 回帖
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    91 引用 • 59 回帖 • 1 关注
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖 • 8 关注
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖 • 1 关注
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    11 引用 • 15 回帖
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖 • 2 关注
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    33 引用 • 108 回帖
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 405 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    43 引用 • 130 回帖 • 259 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 17 关注
  • 导航

    各种网址链接、内容导航。

    45 引用 • 177 回帖
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    134 引用 • 1128 回帖 • 93 关注
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    54 引用 • 37 回帖
  • 工具

    子曰:“工欲善其事,必先利其器。”

    308 引用 • 773 回帖
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    248 引用 • 1342 回帖
  • V2Ray
    1 引用 • 15 回帖 • 4 关注