Nacos 2.0的Spring Boot Starter来了!

公众号程序猿DD

共 4555字,需浏览 10分钟

 ·

2021-07-27 02:54

随着Nacos2.0成熟稳定,Nacos-spring-boot发布0.1.10、0.2.10两个核心版本,全面支持了Nacos2.0,同时支持自动识别配置类型注入能力,修复了高并发场景下数据一致性问题。

Nacos-spring-boot老用户,将相关maven依赖进行如下替换,即可快速升级。

<dependency>
  <groupId>com.alibaba.boot</groupId>
   <artifactId>nacos-config-spring-boot-starter</artifactId>
   <version>0.2.10</version>
</dependency>

本文将系统介绍新版本增强能力,并且以一次生产环境的配置管理项目构建过程为例,详细描述新版本Nacos Spring Boot0.2.10版本的部署,帮助Spring Boot老玩家快速上岸Nacos2.0,感受长连接带来的10倍性能提升。

Nacos-spring-boot新版本特性

新发布的0.1.10版本和0.2.10版本主要feature增强包括以下几个部分:

全面兼容Nacos2体系,向长连接时代演进

Nacos1体系中,配置中心的订阅、实时推送功能主要通过长轮训进行。尽管长轮训是HTTP短连接体系中被采用较多的动态刷新解决方案,但也不可避免地存在时延过高等缺陷;在生产实践中暴露了一定问题,如下面这两个链接所示:

  • https://github.com/alibaba/nacos/issues/6345

  • https://github.com/alibaba/nacos/issues/2674

Nacos2体系将整个配置中心的订阅、推送功能重构成为了基于gRPC的长连接方案,保证了配置刷新实时推送;迄今为止,已经历了大量的生产环境考验。

自动识别配置的文件类型

在使用Nacos-spring-boot新版本之后,即使用户对配置类型未设置的情况下,nacos-spring-boot也会自动识别该配置的文件类型(json/yaml/properties)并给定默认值。该机制极大降低了因为文件类型不匹配,业务侧出现配置处理错误的风险。下图为新版本Nacos-spring-boot项目在一次配置文件刷新过程中的工作机制。

@NacosValue注解全面支持Spel表达式

Spel表达式全称为“Spring Expression Language”,是Spring自带的一种动态字符串构建方式表达式)。用户可以方便地使用Spel表达式来定义NacosValue,与Spring功能完美整合,减少SpringBoot玩家们的工作量。

修复了高并发场景下的一致性问题

阿里云内部同学在使用Nacos-spring-boot项目进行大规模压测的过程中,出现了一些配置读取错误:在大流量频繁修改某些dataId的配置的过程中,客户端可能会拉取到旧版本的配置数据,导致客户端配置数据反复。Nacos-spring-boot新版本通过增加智能锁、升级Nacos-spring依赖等方式,对于潜在的线程安全风险进行了修复。

生产演示-客户端部署

Springboot老玩家可以通过下面方式升级到Nacos-spring-boot新版本。

在 Maven 项目的 pom.xml 文件中增加(或升级)以下依赖来获取 Starter

<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>nacos-config-spring-boot-starter</artifactId>
    <version>0.2.10</version>
</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 版本。

在 application.properties 文件中配置连接信息

nacos.config.server-addr=${nacos_server_address}:8848

注:${nacos_server_address}为占位符,表示Nacos server的地址,后文将给出如何获取其详细地址信息的方案。

使用 @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.classargs);
     } 
}

使用 @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;
    } 
}

生产演示-服务端部署

Nacos官方为SpringBoot玩家提供了两种服务端的部署方式:自建开源Nacos和MSE Nacos专业版。

自建开源Nacos

用户如果选择开源Nacos,可以进行自主部署、运维、生产环境调优;另外,由于开源Nacos协议为Apache2.0协议,用户甚至可以进行自定义功能的开发。开源Nacos的安装步骤可参考https://github.com/alibaba/nacos,支持环境包括Windows、MacBook、Linux等各种平台,可以方便地进行单机或集群启动。

MSE Nacos专业版

MSE Nacos则致力于提供高可用的一站式解决方案,相对于基础版和开源版本进行了大量升级:

  • 自动化升级流程,无需复杂运维部署,即可完成基础版至专业版的平滑升级。
  • 提供企业级99.95%高可用保障。
  • 支持长链接,性能相对于基础版提升10倍。
  • 更完善的配置加解密体系,无需担心敏感配置信息丢失风险。
  • 更完善的鉴权体系,全面引入阿里云RAM主子账号体系权限控制。

使用MSE Nacos专业版作为服务端,详细步骤可分为如下几步。

1、首先访问MSE官网,https://cn.aliyun.com/product/aliware/mse?spm=nacos-website.topbar.0.0.0,登陆。

2、点击"立即购买"、"创建实例"。

3、选择“专业版”,并根据需要进行其他相应设置。

并点击立即购买。

4、等待3分钟,即可在控制台看到刚刚创建的Nacos集群。

5、将相应内网或公网地址复制,并填入上文所述${nacos_server_address}中。(如希望使用内网访问,则可直接复制内网地址;如希望使用公网访问,则需要点击进入并将访问端添加进宫网白名单)。

6、点击进入相应实例的控制台,点击“配置列表”、“创建配置”。

7、创建和客户端匹配的配置信息,注意下图中红框标出的几个项目(其中数据加密根据需要选择),最后点击“发布”。

结果验证

在本地启动客户端项目,并运行以下命令:

curl localhost:8080/config/get

若返回以下信息,则说明 SDK 可正常使用。

3000

在MSE控制台将示例配置 com.alibaba.nacos.example.properties更改为以下内容并发布。

connectTimeoutInMills=6000

若Console打印出更新的配置内容 ,则说明SDK的配置自动更新功能正常;工程正式跨入高性能配置中心时代。


往期推荐

IntelliJ IDEA官方宣布中文汉化包正式发布

令人笑喷的56个代码注释,你写过多少?

还在用 Random生成随机数?试试 ThreadLocalRandom,超好用!

消息幂等(去重)通用解决方案,真顶!

最强代码生成器平台,杀疯了!



喜欢本文欢迎转发,关注我订阅更多精彩

关注我回复「加群」,加入Spring技术交流群

浏览 32
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报