前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spring cloud使用nacos作为配置中心

spring cloud使用nacos作为配置中心

作者头像
码农小胖哥
发布2019-12-10 15:41:02
1.7K0
发布2019-12-10 15:41:02
举报
文章被收录于专栏:码农小胖哥的码农生涯
1.前言

前几日 Spring Cloud Alibaba 正式转正了。而且发布了转正后的一个正式版本。今天我们就试一试nacos的功能之一:配置中心。 结合最新版本的Spring Cloud 来试一试手感。这里假设你已经安装了nacos server。如果不会也没有关系可以看我的往期文章,有如何快速搭建一个nacos server的文章。

2.新旧版本兼容性

本次发。版与以往发生一些变化。从官网得知此次的版本号为2.1.0.RELEASE。而且依赖的坐标发生了变化。在此之前groupId为org.springframework.cloud,最新版本的groupId不在使用Spring官方的而是使用 alibaba的com.alibaba.cloud 。如果你从旧的版本升级到最新版本这个需要注意一下。其他从代码层面不用修改。

3.统一的BOM管理

maven最佳实践是在我们搭建自己的项目时构建我们自己的依赖池BOM。那么什么是BOM呢?BOM(Bill of Materials)是由Maven提供的一个功能,它通过定义一整套相互兼容的jar包版本集合,使用时只需要依赖该BOM文件,即可放心的使用需要的依赖jar包,且无需再指定版本号。BOM的维护方负责版本升级,并保证BOM中定义的jar包版本之间的兼容性。也就是说只要放到篮子里的都是可用的,而且可以按需使用。实际上也建议使用统一的BOM,方便依赖管理。随着项目的发展,依赖必然会多起来,如果依赖不集中管理很容易出现兼容性问题。

微服务模块众多,如果开始没有集中式统一的依赖管理,对于后期维护、扩展都不方便。所以我们要建立起自己的Spring Cloud BOM管理。

4.构建自己的Spring Cloud BOM

我们将Spring Boot 的BOM、Spring Cloud 的BOM、Spring Cloud Alibaba 的BOM聚合起来。构成我们自己的BOM。当然你可以加入其它你需要的第三方依赖。该BOM工程没有任何逻辑代码只有一个pom.xml文件。而且packaging只能声明为pom。

5.按照BOM构建具体服务

按照上面的bom我们可以构建一个具体的服务了。你可以通过引入pom的方式来构建。也可以通过父子依赖关系来构建。这里我们通过父子依赖来构建一个provider-service的Spring Boot应用服务。核心pom片段如下:

6.Nacos Config 相关配置解读

通过以上就引入了nacos的配置中心依赖。注意我们的Spring Boot 配置文件需要命名为 bootstrap.yml或者bootstrap.properties。在配置文件中我们声明好nacos的配置就行了。

所有的nacos 配置中心配置都以 spring.cloud.nacos.config 为前缀。具体的nacos config配置类为NacosConfigProperties(一般各种Spring Boot组件的配置命名都是OOXXProperties)。我们来说明一下其主要配置属性:

  • serverAddr nacos服务端的地址,格式 {ip}:{port} 。
  • group nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 naocs 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。
  • prefix 在 Nacos Spring Cloud 中data ID的组成部分,prefix 默认为 ${spring.application.name}。nacos dataId 的完整格式:${prefix}-${spring.profile.active}.${file-extension}。
  • fileExtension 目前支持的nacos远程配置文件的类型。目前只有yaml和properties,默认properties。
  • endpoint 当 nacos server 集群需要扩缩容时,客户端需要有一种能力能够及时感知到集群发生变化。及时感知到集群的变化是通过 endpoint 来实现的。也即客户端会定时的向 endpoint 发送请求来更新客户端内存中的集群列表。这玩意儿规则有点复杂,主要用于集群感知。
  • namespace 主要做多环境以及多租户的。是nacos 模型的最外层。有兴趣可以看看nacos模型。
  • contextPath 路径上下文。 该属性体现在serverAddr属性中 {ip}:{port}/{contextPath} 开始的(远不止这么多),默认是 nacos
  • clusterName nacos config 集群名称。你的serverAddr实际上是 {ip}:{port}/{contextPath}/{clusterName} 。

还有一些定制化的额外配置,nacos提供了一些高度自定义的配置可以到官网文档进行研究。我们先玩好常规的东西。我们可以大胆地猜想获取配置的流程是 springboot启动时 nacos client会去nacos server拉取对应的配置然后注入environment。接下来我们实际操作一下。

7.配置Spring Cloud Nacos Client

上面讲解了一些主要配置。其实大部分情况我们遵循约定更加简单。除非你有特殊的业务场景。我们假设你nacos server已经跑起来。然后就是添加本地配置。我们的配置文件像Spring Cloud Config一样必须命名为bootstrap.yml(properties类型也行)。事实上我们只需要配置上 nacos server 请求地址、远端配置文件类型(扩展名)以及nacos dataId就行。当然你可以根据上面的NacosConfigProperties 参数来搞定制化。nacos spring cloud 的默认dataId规则为

${prefix}-${spring.profile.active}.${file-extension} 。prefix 默认是spring.application.name。这里我们采用默认配置定义一个spring.application.name。spring.profile.active如果不设置的话nacos会自动把前面的-符号也去掉。我们进行如下配置:

然后我们打开nacos控制台,点击配置管理右边的+,弹出对话框:

  • Data ID 注意结合我们的配置规则 ${prefix}-${spring.profile.active}.${file-extension}。这里注意弹窗下面给我们造成了不用带扩展名的假象。
  • Group 对应yml中的配置 spring.cloud.nacos.config.group 我使用的是默认值 DEFAULT_GROUP
  • 配置格式 目前Spring Cloud 中只有 yaml和perperties 可选
  • 配置内容 按照你选择的配置格式进行编写,注意格式。

其他的什么高级选项,描述 目前感觉作用不大不做介绍。

按照上面我们的yml,我们的配置应该是:

我们设置了Spring Boot 的启动端口为8888,注意每次增删改都要进行发布。我们来运行一下:

远端的配置生效了。undertow web容器的端口按照我们在nacos server中预设的配置开启。你也可以加入更多的配置试一试。

8.总结

我们在bootstrap.yml就配置了这么少的东西就把远端的配置拉下来并在Spring Boot执行。是不是非常简单。而且还有一个历史版本的回滚功能。你可以自己去搞一下,都非常容易操作。下一篇将对nacos核心的服务发现功能进行简述。

案例代码:https://gitee.com/felord/tino-cloud.git

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农小胖哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
微服务引擎 TSE
微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档