当前位置: 首页 > news >正文

Java - 配置中心初体验

目录

前言

配置中心介绍

什么是配置中心

Nacos配置中心

数据结构

命名空间

分组

服务

配置中心添加配置

读取配置

本地添加依赖

本地添加配置

测试

结语


前言

前文讲了ELK,ELK说简单也简单,说复杂也复杂,但说实话,微服务里这么些个东西,从部署角度来看,比起Dubbo,Nacos这些,ELK算是比较难的一个了,上一篇博客博主也只是简单的讲解了安装,关于具体使用还差得很远。所以里面推荐了官方的账号,官方的账号里面内容很多很大,需要耐心去学习。博主还是推荐大家去官方的c站账号下学习,又具体又全面,而且还不会有问题。开始新的学习前,那喊两声:ELK牛逼,ELK真难,加油!加油!

配置中心介绍

配置中心我们也是针对微服务来说的,所以这个配置中心当然是微服务的配置中心,下面,我们就来说说什么是配置中心。

什么是配置中心

就像文字描述的那样,配置中心主要用来解决配置问题,在微服务项目中,我们的配置一般是写在yml文件或者properties文件中的,这是我们所熟知的一种写法。

有时候,多个子项目共用一个配置的时候,当需要修改时,往往需要去修改每一个子项目的配置,搞不好还会改错,这时候,如果能有一个地方可以统一修改,全部生效,那该是多么轻松啊,这就是配置中心的作用。

总结一下就是:配置中心能够达到高效修改各模块配置的作用。

Nacos配置中心

Nacos我们都知道,我们前面微服务中已经学过,我们知道Nacos是注册中心,所有的子项目都在Nacos服务器上留下了自己的身份信息,所以Nacos就可以尝试对已知的服务器做一些管理,比如配置。

Nacos作为配置中心支持的文件格式很多,除了我们所熟悉的properties,yml,还支持txt,json,xml等,实际我们可能用不到那么多。

数据结构

Nacos数据结构,简单分,可以分为三个部分,分别是:命名空间,分组,服务。

命名空间

命名空间又命Namespace,是Nacos提供的最大的数据结构,一个Nacos可以有多个命名空间,命名空间也可以有多个分组,命名空间在Nacos中可自行创建,创建方法见下方:

我们创建的命名空间叫:

要注意,默认的public命名空间不能删除和修改,你也无法删除和修改。只要自己创建了命名空间,注册Nacos时就可以指定可注册到的命名空间名称了。好处就是,多个命名空间可以对项目起到隔离的作用,使他们之间互不干扰。

要切换命名空间,请看下图:

  

分组

命名空间中,我们说,一个命名空间可以有多个分组,分组的作用就是对他们做进一步的隔离,不需要额外的分组时,分组名可自定义,我们一般推荐使用:DEFAULF_GROUP。细心的小伙伴会发现,这在我们微服务项目中也是有使用的。

服务

当命名空间和分组名称都确定之后,就可以添加服务和配置了,我们微服务中的各模块就是服务,默认保存在public命名空间下,下面我们就用配置中心功能来修改下配置的位置,设置了命名空间,其实就是设置命名空间ID,这在我们的命名空间截图中是有体现的,大家可以翻上去看一看。

值得一提的是,配置中心的优先级高于项目中已有的yml等配置文件的优先级。这一点,我们在下面会继续讲他们的优先级,这决定了他们的生效顺序。

配置中心添加配置

下面,我们来添加一下配置,就以我们前面学的微服务项目中的cart模块为例,下面开始添加配置:

配置管理-配置立列表-右上方+号,点击后进入下面的页面:

Data ID就是该配置的名字,可自定义,建议名称格式:nacos-cart.yaml。

Group默认为我们推荐的名称,没有其他分组的情况建议使用默认的,避免搞乱。

配置格式我们建议选YAML,这种格式的层级效果明显,便于观察。

配置内容,可以把我们本地的配置文件中的内容填写进来。

在添加配置之前,我们要先知道一点,虽然配置中心的配置优先级最高,但他们并不是互斥的,而是合并兼容:

配置中心和本地都有的,配置中心生效

配置中心有的,本地没有的,配置中心生效

配置中心没有的,本地有的,本地的也是可以生效的

配置中心和本地的不重复的配置,两者皆生效

这里为了测试效果,我们不会把整个配置文件都贴进去,其实贴进去也可以,但为了看效果,我们只把数据库链接部分的配置贴进去,同时把本地文件中数据库部分删除。

像这样:

  

读取配置

做完这些还不够,配置中心还不能够正常工作,还需要两步来完成读取配置,让配置中心工作。万丈高楼平地起,虽然前期麻烦一点,但是后面香啊。

本地添加依赖

<!--  配置中心的依赖  -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--  支持SpringCloud加载系统配置文件的依赖   -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

本地添加配置

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        #  指定配置中心的位置
        server-addr: localhost:8848
        # 指定配置文件所在的组名(命名空间默认public不需要指定)
        group: DEFAULT_GROUP
        # 设置配置文件的后缀名
        # 默认情况下会加载[服务器名].[后缀名]为DataId的配置
        # 当前项目名称为nacos-cart所以默认加载的DataId为:nacos-cart.yaml
        file-extension: yaml

这里里面的文字部分,很重要,特别是group和文件扩展名:

不要纠结这个名字,一个项目我们只能有一个yml文件生效对吧?别跟我说指定dev.yml生效,最终还是一个。

最后一定要点击发布:

 

发布成功后会有如下提示,接下来就可以准备测试环节了: 

 

 

测试

测试很简单,运行你的功能就可以了,在此之前,请启动需要开启的服务,如Nacos,seata等,看自己项目需要开启。运行后,只要cart模块能正常运行并工作,你的测试就是成功的,我们在cart中引入了knife4j,它能正常工作,就代表测试是成功的,不再贴测试结果了,请大家严格自行完成测试。

结语

配置中心的使用整体上算是比较简单的,操作性也不强,只要细心一点就可以完成,难度指数只能算是一颗星了,想起上篇ELK博主就不免心中叹息,只怪博主ELK也没学到家,还不能够用最简洁的方式让大家快速学会,革命尚未成功,同志仍需努力,一起加油吧,童鞋们!

相关文章:

  • 面试--每日一经
  • 算法训练营第五十九天|LeetCode647、516
  • 音视频开发—MediaCodec 解码H264/H265码流视频
  • 【python进阶】序列切片还能这么用?切片的强大比你了解的多太多
  • 内网升级“高效安全”利器!统信软件发布私有化更新管理平台
  • 什么是Vue
  • [图像识别]关于cv2库无法安装的故障问题解决,全网最全解决方案!本人亲身测试,参考了stackoverflow、51CTO等博客文章总结而成
  • 菜鸟刷题Day5
  • 22 k8s常用命令
  • 接口的定义和实现
  • 蓝桥杯冲刺 - week1
  • windows微服务部署
  • 深入了解JVM:Java程序背后的核心原理
  • 【新星计划2023】SQL SERVER (01) -- 基础知识
  • 【Node.js】身份认证,Cookie和Session的认证机制,express中使用session认证和JWT认证
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • canvas 五子棋游戏
  • C学习-枚举(九)
  • DOM的那些事
  • Fabric架构演变之路
  • HTTP中的ETag在移动客户端的应用
  • Idea+maven+scala构建包并在spark on yarn 运行
  • scrapy学习之路4(itemloder的使用)
  • vue-router的history模式发布配置
  • XForms - 更强大的Form
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 工作中总结前端开发流程--vue项目
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 深入浅出Node.js
  • 使用common-codec进行md5加密
  • 算法-图和图算法
  • 进程与线程(三)——进程/线程间通信
  • 选择阿里云数据库HBase版十大理由
  • 整理一些计算机基础知识!
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • (3)选择元素——(17)练习(Exercises)
  • (二)linux使用docker容器运行mysql
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (原)本想说脏话,奈何已放下
  • . Flume面试题
  • .NET CLR Hosting 简介
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .net中的Queue和Stack
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • [202209]mysql8.0 双主集群搭建 亲测可用