Java - 配置中心初体验

前言

前文讲了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,这种格式的层级效果明显,便于观察,主要是现在仅支持YAML和Properties。

配置内容,根据需要把我们本地的配置文件中的内容填写进来。

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

像这样:

读取配置

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

本地添加依赖

本地添加配置

添加配置时,需要我们新建一个file,名字叫bootstrap.yml,千万别写错了,创建成功后前面的logo也是一片叶子,不同的是右下角是个云的标志:

接着在这个文件中添加配置信息: 

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

不要纠结这个名字,如果你想要,你可以随便写名字,然后在配置中配置名字:

最后一定要点击发布:

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

测试

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

优先级说明

简单来说,bootstrap.yml>bootstrap.properties>application.yml>application.properties。这是从项目启动到启动完成过程中,配置文件生效的先后顺序,可以看到,yml的优先级永远高于properties,bootstrap.yml优先级最高。

bootstrap这组配置文件有点特殊,一般是专门用于加载系统级别的配置,这些配置一般不会轻易修改。

特别注意,只有SpringCloud项目才能加载bootstrap的配置,加载这组配置也是需要依赖的,上面已经给出:spring-cloud-starter-bootstrap,不过我们给出的依赖是2020年之后的依赖,之前的依赖不是这个,是什么我就不说了,避免误导大家,感兴趣的可以查下。

结语

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

全部评论
你确定这个难度指数是一颗星???
点赞 回复 分享
发布于 2023-03-25 14:39 山东
c站是哪个?我只知道a站和b站。。。😮
点赞 回复 分享
发布于 2023-03-25 14:36 山东

相关推荐

05-13 12:52
门头沟学院 Java
具体业务是酒店。先贴timeline:    4-14 投递    4-26 笔试(美团好像是海笔?我推了一周才考)    4-28 约一面(我没做ai面试也约了)    5-6   一面,5-9约二面    5-12 二面    5-13 offer一面(60min)    1. 自我介绍    2. 询问项目,我有一个实验室项目所以基本都问了实验室项目,大概问到的点是项目的难点和亮点,稍微了解了一下项目的场景(约20min)    3. 八股题目(30min)        反射的原理,反射的应用        HashMap的实现原理,红黑树和链表之间的转换阈值        ThreadLocal的实现原理,父子线程之间怎么传递数据,子线程改了InheritableThreadLocal父线程会察觉到吗        线程池的主要参数,常见线程池主要参数        java8使用的垃圾处理器,CMS和G1的阶段        new一个对象的流程        SPRING框架如何管理对象        SPRING用到了哪些设计模式,@Filter注解用了哪一种        MySQL慢查询优化,索引的数据结构,为什么选用B+树,B+树的层数计算,B+树的扩容机制        MVCC的大致原理和MySQL事务隔离级别        Redis缓存穿透击穿和雪崩的定义和解决方案    4. 手撕:合并区间,力扣原题(5min)    5. 反问(5min)        部门业务:酒店        面试表现:不让说        学习建议:再看看基础的,项目多实践一下        面试流程:3天之内出结果    6. 面试表现:八股有点忘了,第一次面也有点紧张,说话磕磕巴巴的(还被面试官问了是不是第一次面),表现不是很好二面    1. 专业非科班,而且看着有点远啊?    2. 未来的职业规划(后续在反问环节解释说这个问题是想问我会不会继续干开发)    3. 项目询问        实验室项目的场景和效果        感觉和互联网的场景不太一样?聊聊你是怎么解决开发过程中遇到的困难的        为什么轮子要选这个?        聊聊分布式锁+状态机可能出现的安全隐患和解决方案(没答上来,面试官说应该按照具体情况加验证保证安全)    4. 八股        操作系统看过吗,页表的概念,多级页表的作用,能否节约内存(这个理解错了,解释后面试官觉得我说的也不错)    5.场景题        怎么在一个1T的文件中比较高效地定位一个1M的块    6. 闲聊        放不放实习?        为什么用java?java怎么学的?        第一次用框架搭项目遇到了啥问题,怎么解决的?    7. 反问        部门业务:比一面讲的细了不少,巴拉巴拉了一堆,当时有点大脑宕机了,没听进去一点,光点头嗯嗯啊啊了        学习建议:代码差不多了,多从宏观上思考        面试流程:3-5天,问确切时间说自己也不知道    8. 面试表现:聊得还挺好的,氛围不错,大部分都说上来了,就是场景题大脑宕机了没说上来,后续在提醒下才说了个差不多。    美团的面试体验是独一档的好,面试官感觉都很有精神,态度也很好,遇到不会的题目和紧张的时候都会鼓励、给提示和给台阶下,流程推进也挺快的(不是因为给我发offer了我才吹的)。    感谢美团,化身团孝子(doge)。祝大家暑期实习顺利!
点赞 评论 收藏
分享
1. 字节云基础架构(给offer):base北京,1. 字节云内部基础设施产品界面,资源运维数据库的管理 2. 资源抽象与管理,封装为可调用服务供给上层的中台和业务线。3. 资源成本核算体系,类似云服务计费 4. 服务框架PaaS,提供微服务架构支持,包括服务发现流量调度等 5. 架构设计与技术孵化,如内部业务迁移到火山引擎,AI基础设施探索前沿方向(号称前面这些方向理论上均可选)。个人理解是工作偏鸡架偏偏又核心技术少(相比IaaS做k8s网络这类最底层的鸡架),工作又不太贴近上层业务或者业务中台,所以职业发展前景,技术前景方面感觉存疑。(但是字节福利真的很不错,另外字节发offer早一些所以已经接下来了,如果鸽掉不知道秋招有没有影响)2. 滴滴打车(给offer):base北京,网约车部门,具体的小部门当前未知需要先接下offer后续再定夺,但愿能给个稍微核心些的小业务部门,不要再给我鸡架了。如果拿到比如交易链路,履约之类的比较核的部门是否是比较好的选项?但是滴滴相对来说好像不算大厂?福利待遇这些可能也差些。3. 京东零售平台研发中间件部门(HR面后等结果):base北京,产品服务于京东集团所有业务部门rpc框架Java,配置中心,调度中心,处理中心,互斥锁,开发框架应用等。也是偏鸡架,但是好在它们这边可以给我机会转java,秋招路子更宽些可能(golang选手暑期碰壁碰麻了)。4. 小米新零售仓储供应链管理(给offer):base武汉,是Java后端开发岗位。相对来说该业务在小米还算偏核心,无奈base武汉debuff加上小米给钱极其抠门debuff估计即使转正了秋招也不会去。5. 腾讯S1灰产打击后端(推进到三面不一定能过):base深圳,做灰产打击的部门,也有一些和政企服务的对接。感觉部门应该很边缘?可能转正率也不会很高不太懂前景怎么样。6. 百度安全平台后端(推进到二面不一定能过):base北京,安全平台相关产品服务端功能模块开发,感觉像是给安全大佬当小弟,对接他们的安全产品写后端。感觉应该也不算业务核心,发展前景不明确?golang选手无实习经历,奈何鼠鼠太菜了暑期实习面挂一大堆处处碰壁,疯狂给母校丢脸。磕磕绊绊到五月份才开始捡漏一些offer,最后只捞到一些不太好的选项,只能矮个子里面挑个稍微ok点的。求各位佬帮忙出出主意,还是想尽量通过暑期转正能有个保底,或者实习经历秋招能更有含金量一些,孩子已经被捶打麻了。
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务