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

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

学习于: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 关注

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖 • 6 关注
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    536 引用 • 672 回帖
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    116 引用 • 99 回帖 • 267 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 17 关注
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 599 关注
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    15 引用 • 7 回帖 • 9 关注
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    40 引用 • 40 回帖
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 426 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    89 引用 • 113 回帖 • 1 关注
  • Sublime

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

    10 引用 • 5 回帖
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    4 引用 • 16 回帖 • 1 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    124 引用 • 580 回帖
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 60 回帖 • 470 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 1 关注
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 126 关注
  • OnlyOffice
    4 引用 • 26 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 349 关注
  • CodeMirror
    1 引用 • 2 回帖 • 116 关注
  • 职场

    找到自己的位置,萌新烦恼少。

    126 引用 • 1699 回帖
  • Bug

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    77 引用 • 1741 回帖 • 2 关注
  • 工具

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

    273 引用 • 679 回帖
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 588 关注
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    103 引用 • 126 回帖 • 448 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    215 引用 • 462 回帖 • 1 关注
  • 分享

    有什么新发现就分享给大家吧!

    242 引用 • 1746 回帖 • 2 关注
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖 • 34 关注
  • danl
    63 关注