一、Nacos代替Config作为服务配置中心
1、为了测试,我们创建新的module,cloudalibaba-config-nacos-client3377:
pom.xml:
<?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>cloud2020</artifactId>
<groupId>com.jiguiquan.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloudalibaba-config-nacos-client3377</artifactId>
<dependencies>
<!--springcloud alibaba nacos config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--springcloud alibaba nacos discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--公共服务模块依赖-->
<dependency>
<groupId>com.jiguiquan.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<!--springboot项目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>
<!--热部署devtools-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
</project>
2、配置文件:application.yml 和 bootstrap.yml
Nacos作为服务配置中心时,和springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动;
bootstrap.yml的优先级高于application.yml;
bootstrap.yml:
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
server-addr: localhost:8848
file-extension: yaml
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# 这就是实际拼接好的配置文件的名称 "nacos-config-client-dev.yaml"
application.yml:
spring: profiles: active: dev
3、主启动类:NacosConfigClientMain3377.java:
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigClientMain3377 {
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class, args);
}
}
4、业务类ConfigClientController.java:
@RestController
@RefreshScope //为了自动动态刷新
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping(value = "/config/info")
public String getConfigInfo(){
return configInfo;
}
}
到这里,准备工作就做完了,在配置之前,重点记住匹配规则:
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# 这就是实际拼接好的配置文件的名称 "nacos-config-client-dev.yaml"
二、开始在Nacos中增加配置文件——无命名空间无分组情况
1、在Nacos的 配置管理——配置列表中,增加如下配置:


2、启动3377服务,进行测试:
访问地址: http://localhost:3377/config/info

显然,配置信息正常被读取了,配置中心生效!
3、测试动态刷新配置信息,直接将配置文件中的version修改为version=2.0
别的什么都不要动,依旧访问上面的地址:

配置信息修改依旧生效,特别的方便,比SpringCloud Config + Bus方便很多;
三、Nacos配置中心中命名空间、分组、DataID 三者的关系
首先思考两个问题:
问题1:
实际开发中,通常一个系统会准备:dev、test、prod等环境,那么如何保证指定环境启动时,服务等到到对应环境的配置文件?
问题2:
一个大型的分布式微服务系统中,会有很多小的微服务项目;每一个微服务都会有自己的dev、test、prod环境的配置文件;
那该怎么对这些微服务的配置文件进行管理呢?
肯定得有类似于文件夹的分类功能吧!
1、先来看看Nacos作为配置中心的界面:

2、Namespace + Group + DataID 三者的关系?
这三者的关系设计,类似于Java中的 package名和类名;
Namespace :区分部署环境;
Group和DataID:逻辑上区分两个目标对象;
三者的情况如图:

Namespace:public
Group:DEFAULT_GROUP
默认的Cluster集群:DEFAULT
3、实际使用:
比如我们有三个环境:开发dev、测试test、生产prod,我们可以创建三个Namespace,不同的Namespace用以区分不同的环境,之间是隔离的;
上图中额Service就是一个服务,一个Service中可以包含多个Cluster集群,Nacos中默认的Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分;
比如为了容灾,我们可以将服务Service分别不再杭州机房和广州机房,这是我们就可以给杭州机房的微服务集群起名为HZ,将广州集群起名为GZ,还可以尽量让同一个机房的服务相互调用,以提高性能;
最后是Instance,就是微服务的单个实例;
四、综合使用Namespace + Group + DataID的Case
1、在命名空间下新建dev和test两个Namespace;

新建完成后,我们就能看到对应的命名空间ID,public(保留空间)是没有办法删除的;
2、然后,我们再在test 156b63d1-9ad3-4e42-bdc5-072549704f30 命名空间下,创建三个配置文件,他们分别属于三个不同的分组;

3、我们修改3377服务的配置文件bootstrap.yml:
增加namespace和group的配置:
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
server-addr: localhost:8848
file-extension: yaml
namespace: 156b63d1-9ad3-4e42-bdc5-072549704f30
group: DEV_GROUP
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# 这就是实际拼接好的配置文件的名称 "nacos-config-client-dev.yaml"
4、重启3377服务,继续访问上面的地址:

访问结果,与我们预期一致!
五、Nacos集群和持久化配置
上面的知识点都是很浅显的简单使用,而且使用的是Windows版的Nacos,单机部署,且配置信息没有持久化配置到我们制定的数据库,而是使用的Nacos本身自带的数据库;
这些显然是不可能满足实际生产需求的;
所以实际生产中我么肯定是要使用 Linux版 + 集群部署 + 指定数据库持久化数据;
由于这部分内容比较多,所以需要单独开一片文章讲解!
连接在此:http://www.jiguiquan.com/archives/943
个人此项目代码地址(持续更新):



