作者 | 涌月
随着Nacos2.0成熟稳定 Nacos-spring-boot发布0.1.10、0.2.10两个核心版本 全面支持了Nacos2.0 同时支持自动识别配置类型注入能力 修复了高并发场景下数据一致性问题。
Nacos-spring-boot老用户 将相关maven依赖进行如下替换 即可快速升级。
dependency
groupId com.alibaba.bootgroupId
? artifactId nacos-config-spring-boot-starterartifactId
? version 0.2.10version
dependency
本文将系统介绍新版本增强能力 并且以一次生产环境的配置管理项目构建过程为例 详细描述新版本Nacos Spring Boot0.2.10版本的部署 帮助Spring Boot老用户快速上岸Nacos2.0 感受长连接带来的10倍性能提升。
新发布的 0.1.10 版本和 0.2.10 版本主要 feature 增强包括以下几个部分
1、全面兼容 Nacos2 体系 向长连接时代演进
Nacos1 体系中 配置中心的订阅、实时推送功能主要通过长轮训进行。尽管长轮训是 HTTP 短连接体系中被采用较多的动态刷新解决方案 但也不可避免地存在时延过高等缺陷 在生产实践中暴露了一定问题 如下面这两个链接所示
https://github.com/alibaba/nacos/issues/6345
https://github.com/alibaba/nacos/issues/2674
Nacos2 体系将整个配置中心的订阅、推送功能重构成为了基于 gRPC 的长连接方案 保证了配置刷新实时推送 迄今为止 已经历了大量的生产环境考验。
2、自动识别配置的文件类型
在使用 Nacos-spring-boot 新版本之后 即使用户对配置类型未设置的情况下 nacos-spring-boot 也会自动识别该配置的文件类型(json/yaml/properties)并给定默认值。该机制极大降低了因为文件类型不匹配 业务侧出现配置处理错误的风险。下图为新版本 Nacos-spring-boot 项目在一次配置文件刷新过程中的工作机制。
3、 NacosValue 注解全面支持 Spel 表达式
Spel 表达式全称为“Spring Expression Language” 是 Spring 自带的一种动态字符串构建方式表达式 。用户可以方便地使用 Spel 表达式来定义 NacosValue 与 Spring 功能完美整合 减少 SpringBoot 用户们的工作量。
4、修复了高并发场景下的一致性问题
阿里云内部同学在使用 Nacos-spring-boot 项目进行大规模压测的过程中 出现了一些配置读取错误 在大流量频繁修改某些 dataId 的配置的过程中 客户端可能会拉取到旧版本的配置数据 导致客户端配置数据反复。
Nacos-spring-boot 新版本通过增加智能锁、升级 Nacos-spring 依赖等方式 对于潜在的线程安全风险进行了修复。
在 Nacos 服务端 为了方便 Nacos 部署升级和尽可能保证配置信息的信息安全 我们是从阿里云微服务引擎MSE中购买的一个 2 核 CPU 4G 内存的三节点 Nacos 集群。
在Nacos客户端 在Springboot老用户可以通过下面方式升级到Nacos-spring-boot新版本。
1、在 Maven 项目的 pom.xml 文件中增加/升级以下依赖来获取 Starter
dependency
?? groupId com.alibaba.bootgroupId
?? artifactId nacos-config-spring-boot-starterartifactId
?? version 0.2.10version
dependency
注 ?使用时请根据自定义构建的Spring Boot版本选择相应的nacos-config-spring-boot-starter版本 nacos-config-spring-boot-starter 版本 0.2.10 对应 Spring Boot 2.x 版本 版本 0.1.10 对应 Spring Boot 1.x 版本。
2、在 application.properties 文件中配置连接信息
nacos.config.server-addr ${nacos_server_address}:8848
注 ${nacos_server_address}为占位符 表示Nacos server的地址 后文将给出如何获取其详细地址信息的方案。3
3、使用 NacosPropertySource 加载 dataId?为 example 的配置源 并开启自动更新
SpringBootApplication
NacosPropertySource(dataId? com.alibaba.nacos.example.properties ,?autoRefreshed? true)
public class NacosConfigApplication {
??? public static void main(String[]?args) {
????????SpringApplication.run(NacosConfigApplication.class, args);
????}
}
4、使用 NacosValue 注解设置属性值
Controller
RequestMapping( config )
public class ConfigController {
?? NacosValue(value? ${connectTimeoutInMills:5000} ,?autoRefreshed? true)
?? private int connectTimeoutInMills;?
?? RequestMapping(value? /get ,?method? ?GET)
?? ResponseBody
?? public int get() {
?????? return connectTimeoutInMills;
???}
}
在本地启动客户端项目 并运行以下命令
curl?localhost:8080/config/get
若返回以下信息 则说明 SDK 可正常使用。
3000在 MSE 控制台将示例配置 com.alibaba.nacos.example.properties 更改为以下内容并发布。
若 Console 打印出更新的配置内容 则说明 SDK 的配置自动更新功能正常 工程正式跨入高性能配置中心时代。
买一个 域名 和空间多少钱?买一个域名和空间需要的费用,主要看买什么样的域名...
基于阿里云车联网云调度平台、数据库、OTA升级等平台能力以及达摩院技术,持续探...
大家好,我是鱼皮的小老弟阿巴,大家也可以叫我小阿巴。 我也对编程非常感兴趣,...
文本已经经过原作者 Kai 授权翻译。 我们称一个字符序列为字符串。这几乎是所有...
日前, SAP发布了2020年第四季度和年度财报,以及本季度主要新签单及上线大中华...
域名 怎么防止劫持?域名作为企业形象的重要组成部分,需要仔细的保护。如果域名...
大力推动提速降费电信网络水平全球领先 镜头 海拔2400米的滇川公路突遇滚石坠落...
世界互联网大会·互联网发展论坛11月23日在浙江乌镇开幕。国家主席习近平向论坛...
1. 接口描述 接口请求域名: cvm.tencentcloudapi.com 。 本接口 (InquiryPriceR...
本文已收录至码云: https://gitee.com/jalon2015/java-book 前言 之前写过一篇...