SpringCloud Alibaba学习(二):Nacos之服务配置中心

简介: SpringCloud Alibaba学习(二):Nacos之服务配置中心

一、基础配置



参考文档       Spring Cloud Alibaba Reference Documentation


1、新建模块


新建普通maven模块 cloudalibaba-config-nacos-client3377


2、修改pom文件


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud</artifactId>
        <groupId>com.shang.cloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>cloudalibaba-config-nacos-client3377</artifactId>
    <dependencies>
        <!--nacos-config-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--nacos-discovery-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--web + actuator-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--一般基础配置-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
</project>


3、编写yml文件


(1)bootstrap.yml


# nacos配置
server:
  port: 3377
spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# 应该是 nacos-config-client-dev.yaml


(2)application.yml


1. spring:
2.   profiles:
3.     active: dev # 表示开发环境


(3)为什么要配置两个yml

     

Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,


拉取配置之后,才能保证项目的正常启动。


springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application。

     

其实学了config之后,这样的做法很容易理解。

 

4、编写主启动类


@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377 {
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigClientMain3377.class, args);
    }
}


5、编写业务逻辑代码

     

通过springcloud的原生注解 @RefreshScope  来实现配置的自动刷新。

@RestController
@RefreshScope   //在控制器类加入@RefreshScope注解使当前类下的配置支持Nacos的动态刷新功能。
public class ConfigClientController {
    @Value("${config.Info}")
    private String configInfo;
    @GetMapping("/config/info")
    public String getConfigInfo(){
        return configInfo;
    }
}



6、在Nacos中添加配置信息


(1)Nacos中的配置规则


24b4813eadc541589c01dda99c7b1917.png6940d1b14fbd47449e519afd5d8e15e5.png


所以我们的DataId应为 nacos-config-client-dev.yaml


(2)配置新增


1c420c227d094589b58bce711cab7932.pngb31ec778aba34413a89021e7949e2697.png


然后点击发布。

a4ba7f8675994dfa9f280a7d0eb0ff98.png


7、启动测试

     

启动3377

     

访问        http://localhost:3377/config/info

99f3d034bcc6467195fd39ab09bb5663.png


读取到了我们之前写在Nacos里的配置


8、Nacos自带动态刷新

     

修改配置文件

117a12f06cce46dba1e51cf84a880345.png


修改好后只需刷新页面即可获取新的配置文件

     

简直比config方便太多!!!

 

二、分类配置


     

现在有两个问题:


问题1:

     

实际开发中,通常一个系统会准备:


dev开发环境


test测试环境


prod生产环境。


如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢?


问题2:


一个大型分布式微服务系统会有很多微服务子项目,每个微服务项目又都会有相应的开发环境、测试环境、预发环境、正式环境......。那怎么对这些微服务配置进行管理呢?  


1、Nacos中的配置管理

               

Namespace+Group+Data ID

249498eaa82f47d09bef34e76b0a1553.png


类似Java里面的package名和类名

       

最外层的namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象。


9856c908793e4a1cbaebacb4cd8e6eb3.png


默认情况:

     

Namespace=public,Group=DEFAULT_GROUP, 默认Cluster是DEFAULT

     

Nacos默认的命名空间是public,Namespace主要用来实现隔离。

     

比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。

     

Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去

     

Service就是微服务;一个Service可以包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。


比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起一个集群名称(HZ),给广州机房的Service微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。


2、DataID方案加载配置

       

指定spring.profile.active和配置文件的DataID来使不同环境下读取不同的配置。


1)新建配置

               

我们新建一个nacos-config-client-test.yaml


7707ddc069644d62989403cd7cfe128a.png


(2)修改application.yml

               

然后在idea的3377模块中把active改为test

0ae45f1f931345e78e18e47b624be999.png

(3)测试

               

访问        http://localhost:3377/config/info

2178ada14b0b46e2873399aa9427f338.png


发现读取到的是test的配置文件。

     

这就说明我们可以通过更改active的值指定读取的配置文件。

 

3、Group方案加载配置


(1)新建配置      

               

新建一个Group为DEV_GROUP的配置

37da2bb66475428a926b819baad70fa1.png


 再新建一个Group为TEST_GROUP的配置

df630376ba744d75aa866e678cd7810b.png


然后就可以在配置列表里看到两个Data Id相同,Group不同的配置

8f1eb5f793a24daa9836054e4f903aed.png


(2)修改bootstrap.yml和application.yml

             

appcation.yml:

8def079969bf4a8bbbb39ec95a9e615d.png

bootstrap.yml:

d5e2b06b656d45a4a83f5b7c2aeedb57.png


(3)运行测试

8dc0975b469c4491a376f1ebec459be4.png


4、命名空间方案加载配置


(1)新建命名空间

                       新建dev命名空间

66692f39dc57480583883fb72e9bece0.png


再用同样方法新建test命名空间

             

建好了之后,点击配置列表,上方会出现新建的命名空间

a3b1cb75951e490f9a1a7f5bbdb52562.png


(2)bootstrap.yml


f4ab49a529ba49af946302d52cbcf186.png


namespace后的id为:

fba091181cdc4c849df058a29c37000b.png


(3)在新建的namespace下新建配置

efa44d17eec74d9d98968b44721cb936.png


后面的操作即和前面一样。

相关文章
|
1月前
|
JSON SpringCloudAlibaba Java
Springcloud Alibaba + jdk17+nacos 项目实践
本文基于 `Springcloud Alibaba + JDK17 + Nacos2.x` 介绍了一个微服务项目的搭建过程,包括项目依赖、配置文件、开发实践中的新特性(如文本块、NPE增强、模式匹配)以及常见的问题和解决方案。通过本文,读者可以了解如何高效地搭建和开发微服务项目,并解决一些常见的开发难题。项目代码已上传至 Gitee,欢迎交流学习。
125 1
Springcloud Alibaba + jdk17+nacos 项目实践
|
22天前
|
消息中间件 自然语言处理 Java
知识科普:Spring Cloud Alibaba基本介绍
知识科普:Spring Cloud Alibaba基本介绍
55 2
|
30天前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
30天前
|
存储 算法 Java
Nacos学习圣经:从入门到精通 Nacos,最全详解
本文,就是 Nacos 学习圣经,帮助大家彻底掌握 阿里 的核心组件, nacos 。 Nacos学习圣经 正式版本会有更新, 。
Nacos学习圣经:从入门到精通 Nacos,最全详解
|
30天前
|
负载均衡 算法 Java
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
40岁老架构师尼恩分享了关于SpringCloud核心组件的底层原理,特别是针对蚂蚁集团面试中常见的面试题进行了详细解析。内容涵盖了Nacos注册中心的AP/CP模式、Distro和Raft分布式协议、Sentinel的高可用组件、负载均衡组件的实现原理等。尼恩强调了系统化学习的重要性,推荐了《尼恩Java面试宝典PDF》等资料,帮助读者更好地准备面试,提高技术实力,最终实现“offer自由”。更多技术资料和指导,可关注公众号【技术自由圈】获取。
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
|
2月前
|
人工智能 前端开发 Java
Spring Cloud Alibaba AI,阿里AI这不得玩一下
🏀闪亮主角: 大家好,我是JavaDog程序狗。今天分享Spring Cloud Alibaba AI,基于Spring AI并提供阿里云通义大模型的Java AI应用。本狗用SpringBoot+uniapp+uview2对接Spring Cloud Alibaba AI,带你打造聊天小AI。 📘故事背景: 🎁获取源码: 关注公众号“JavaDog程序狗”,发送“alibaba-ai”即可获取源码。 🎯主要目标:
83 0
|
1月前
|
负载均衡 算法 Nacos
SpringCloud 微服务nacos和eureka
SpringCloud 微服务nacos和eureka
59 0
|
1月前
|
负载均衡 Java API
【Spring Cloud生态】Spring Cloud Gateway基本配置
【Spring Cloud生态】Spring Cloud Gateway基本配置
37 0
|
2月前
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
|
3月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
定时任务在企业应用中至关重要,常用于异步数据处理、自动化运维等场景。在单体应用中,利用Java的`java.util.Timer`或Spring的`@Scheduled`即可轻松实现。然而,进入微服务架构后,任务可能因多节点并发执行而重复。Spring Cloud Alibaba为此发布了Scheduling模块,提供轻量级、高可用的分布式定时任务解决方案,支持防重复执行、分片运行等功能,并可通过`spring-cloud-starter-alibaba-schedulerx`快速集成。用户可选择基于阿里云SchedulerX托管服务或采用本地开源方案(如ShedLock)
122 1