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核心的服务发现功能进行简述。