Spring Cloud Alibaba Nacos 配置中心对比与实战

引言

Spring Cloud 官⽅宣布 Spring Cloud Netflix 进⼊维护状态,后续不再进⾏更新已成为事实。作为开发者的我们,如何使⽤极简的⽅式替换现有的 Netflix 组件成为了⾸要解决的问题。⼀起来看看 Spring Cloud Alibaba 是如何使⽤极简的⽅式来做到分布式应⽤的外部化配置,使得应⽤在运⾏时动态更新某些配置成为可能。

⽬前关于 Spring Cloud Config 的标准实现开源⽅⾯有三个,分别是:

  • Spring Cloud Alibaba Nacos Config

  • Spring Cloud Consul Config

  • Spring Cloud Config (Spring Cloud 官⽅集成的⽅式)

那⾯对于这么多的实现,Spring Cloud Alibaba Nacos Config 的实现它具有哪些优势呢?⼤致从以下⼏个⽅⾯来全⽅位的分析。

同时 Spring Cloud Alibaba 还可以基于 Spring Cloud Alibaba Nacos Config ⽆缝对接云上的ACM,这给⼀些需要上云的⽤户带来了极其的⽅便。综上全⽅位的对⽐,Spring Cloud Alibaba NacosConfig ⽆疑提供了性价⽐最⾼的 Spring Cloud Config 的开源实现。

快速入门

1、创建配置

这里省略Nacos的安装与使用,如果对Nacos还不了解,可以查看之前发布的文章:

(1)先启动Nacos服务端

(2)然后访问控制台:http://localhost:8848/nacos/ 

新建一个test.properties测试文件:进入Nacos的控制页面,在配置列表功能页面中,点击右上角的“+”按钮,进入“新建配置”页面,如下图填写内容:

其中:

  • Data ID:     填入test.properties

  • Group  :     不用修改,默认即可 DEFAULT_GROUP

  • 配置格式:    Properties

  • 配置内容: 应用要加载的配置内容,这里仅作为示例,做简单配置,比如:name=hello,阿甘正专

注意:dataid是以 properties(默认的文件扩展名方式)为扩展名。

2、建立一个SpringBoot应用,本示例版本:2.1.6.RELEASE

3、pom文件:

  <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.stwen</groupId>
    <artifactId>alibaba-nacos-config-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>alibaba-nacos-config-client</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>0.9.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <!--  nacos配置中心-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.2</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!--mybatis升级版-->
<!--        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>2.1.9</version>
        </dependency>-->
    </dependencies>

4、配置文件

这里为了方便测试不同的配置功能,建立了多环境的配置文件,你可以根据自己需要开启不同功能,dev、test、prod等,具体看文件文件,我在里面基本都有注释说明。

(1)bootstrap.properties配置:

#spring.profiles.active=${profileActive}
# 与配置中心的文件对应,Data ID=${spring.application.name}.properties
spring.application.name=test
server.port=8003
#nacos 配置中心地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# 自定义对应配置中心的文件类型:
# ${spring.cloud.nacos.config.prefix}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
##对应nacos配置中心的 Data ID=example.yaml,Group=DEV_GROUP
#spring.cloud.nacos.config.prefix=dataSource
## 配置文件扩展类型,默认properties
#spring.cloud.nacos.config.file-extension=yaml
## 分组管理,默认DEFAULT_GROUP
#spring.cloud.nacos.config.group=DEV_GROUP
# 命名空间,官方建议用此区分DEV、TEST等配置
#spring.cloud.nacos.config.namespace=4a107ee7-95f3-466c-88dc-1fa917375e10
# 激活读取xxx-DEV.yyy 配置:${spring.cloud.nacos.config.prefix}-${spring.profile.active}.properties
#spring.profiles.active=TEST

(2)bootstrap-dev.properties配置:

spring.profiles.active=dev
spring.application.name=alibaba-nacos-config-client
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# 命名空间,官方建议用此区分DEV、TEST等多环境配置
spring.cloud.nacos.config.namespace=4a107ee7-95f3-466c-88dc-1fa917375e10

(3)bootstrap-test.properties配置:

# (1)单文件加载 alibaba-nacos-config-client-dev.yaml
spring.profiles.active=test
spring.application.name=alibaba-nacos-config-client
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# 命名空间,官方建议用此区分DEV、TEST等多环境配置
spring.cloud.nacos.config.namespace=00602b1c-2efe-490d-8962-d70d1d37103f
# (2) 多文件加载,无需指定文件类型
spring.cloud.nacos.config.ext-config[0].data-id=jdbc.properties
spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.ext-config[1].data-id=log.properties
spring.cloud.nacos.config.ext-config[1].group=DEFAULT_GROUP
spring.cloud.nacos.config.ext-config[1].refresh=true
spring.cloud.nacos.config.ext-config[2].data-id=test.yaml
spring.cloud.nacos.config.ext-config[2].group=DEFAULT_GROUP
spring.cloud.nacos.config.ext-config[2].refresh=true
# (3) Nacos 共享配置 : 通过上面加载多个配置的实现,实际上nacos已经可以实现不同应用共享配置了
spring.cloud.nacos.config.shared-dataids=test1.yaml,test2.yaml
spring.cloud.nacos.config.refreshable-dataids=test1.yaml,test2.yaml
# 加载顺序,可查看启动日志:(3)<(2)<(1)

5、SpringBoot启动类

这里提供了一个http接口方法,也写在启动类中,当然也可以单独建立一个Controller

@SpringBootApplication
public class AlibabaNacosConfigClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(AlibabaNacosConfigClientApplication.class, args);
    }
    @Slf4j
    @RestController
    @RefreshScope
    static class TestController {
//        @Value("${stwen.name:}")
        @Value("${name:}")
        private String title;
        @GetMapping("/test")
        public String hello() {
            System.out.println(title);
            return title;
        }
    }
}

6、测试

启动刚才建立的SpringBoot应用,访问:localhost:8003/test

这里只演示一个简单的读取配置中心的字段内容,其他功能具体可查看上面的配置文件注释说明,自己去尝试即可。

7、小结

Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。

Spring Cloud Alibaba Nacos Config 是 Config Server 和 Client 的替代方案,客户端和服务器上的概念与 Spring Environment 和 PropertySource 有着一致的抽象,在特殊的 bootstrap 阶段,配置被加载到 Spring 环境中。当应用程序通过部署管道从开发到测试再到生产时,您可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。

参考资料:Nacos官网

往期推荐:

Spring Cloud Alibaba Nacos 配置中心对比与实战

Spring Cloud Alibaba 完美融合Dubbo-Nacos示例

B2B电商平台--ChinaPay银联电子支付功能

学会Zookeeper分布式锁,让面试官对你刮目相看

SpringCloud电商秒杀微服务-Redisson分布式锁方案

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值