SpringCloud Alibaba 使用Nacos作为配置中心及配置隔离讲解
Posted 小毕超
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud Alibaba 使用Nacos作为配置中心及配置隔离讲解相关的知识,希望对你有一定的参考价值。
一、Nacos作为服务配置中心
在上篇文章中我们讲解了使用Nacos作为配置中心,本篇我们继续讲下Nacos的配置中心功能。
上篇文章地址:https://blog.csdn.net/qq_43692950/article/details/122101863
在前我们讲解Spring Cloud 全家桶的文章中我们讲解了Spring Cloud Config 作为配置中心,配置主要存放在了Git中,但应该可以发现一些不足之处,比如没有一个可视化的页面管理配置信息,还有在修改配置后需要通知服务去刷新配置,即使整合了Bus,也要调用Config Server端的接口。而新一代的Nacos 就已经完善了这些问题,可以让我们更加方便的管理配置。
有兴趣的小伙伴也可以看下Spring Cloud Config的使用过程,可以参考下面我的博客:
SpringCloud H版 Config 配制中心讲解:https://blog.csdn.net/qq_43692950/article/details/122024549
SpringCloud H版 Config+Bus 实现全局配制刷新:https://blog.csdn.net/qq_43692950/article/details/122025347
下面就让我们体验下Naocs配置中心的功能,在开始前请安装好Nacos。
二、使用Nacos作为配置中心
新建一个SpringBoot 的 Module ,在pom中引入以下依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<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>com.bxc</groupId>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
其中common使我们在前几篇文章中写的公共的module,主要封装了controller 的返回,如果不添加,将controller的返回修改为自己的即可。
下面修改配置文件,注意不要写在application.yml
中,需要新建一个bootstrap.yml
文件,写在bootstrap.yml
中,用来在程序引导时执行。
server:
port: 8080
spring:
application:
name: nacos-config-client
profiles:
active: dev # 表示开发环境
# active: test # 表示测试环境
cloud:
nacos:
discovery:
server-addr: 192.168.40.1:8848
config:
server-addr: 192.168.40.1:8848
file-extension: yaml
management:
endpoint:
shutdown:
enabled: false
endpoints:
web:
exposure:
include: "*"
主启动类:
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigApplication
public static void main(String[] args)
SpringApplication.run(NacosConfigApplication.class, args);
启动服务:
我们的服务已经注册到nacos中了,下面开始在nacos中新建配置信息:
首先我们在默认的命名空间和默认的组下,新建个配置文件。
上面主要点我标记出来了,其中需要注意的是Data ID 的命名规范是
$spring.application.name-$spring.profiles.active.$spring.cloud.nacos.config.file-extension
,所以根据我们上面我们的配置信息 Data ID 的命名就应该是 nacos-config-client-dev.yaml
。
配置内容我们可以填写:
param:
text: abc
name: ggg
配置完成后点发布即可。
下面在我们项目中新建一个读取配置信息的类:
@Component
@ConfigurationProperties(prefix = "param")
@Data
@RefreshScope
public class ParamProperties
private String text;
private String name;
注意添加上@RefreshScope
注解,可以实现配置内容动态刷新,下面可以看到这个效果。
再新建一个测试入口:
@Slf4j
@RestController
@RequestMapping("config")
public class ConfigController
@Autowired
ParamProperties paramProperties;
@GetMapping("/getConfig")
public ResponseTemplate getConfig()
log.info("text: ", paramProperties.getText());
log.info("name: ", paramProperties.getName());
return ResSuccessTemplate.builder().build();
重启项目,在浏览器中访问: http://localhost:8080/config/getConfig
,查看控制台打印的信息:
可见已经读取到了我们的配置信息,下面可以在nacos中修改下配置内容:
对内容加了个55,点击发布、确认发布,后再次请求接口:
可见我们在没有重启服务器的情况下,就已经刷新了配置内容,但是前提是添加了@RefreshScope
注解。
三、命名空间和分组
上面已经实现了动态配置功能,但是仔细想想还是有些问题,比如我们服务的数量特别多,每个配置都存放在 public
命名空间下,配置那么多也有些不好管理。甚至有可能造成误修改的错误。因此nacos
提供者了 命名空间Namespace 和分组 Group 以及Cluster 的隔离方式。
默认情况:
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),还可以尽量让同一个机房的微服务互相调用,以提升性能。 -
最后是Instance,就是微服务的实例。
下面我们实现对 Namespace 和 Group 进行配置的隔离:
首先在Nacos 中新建一个 Namespace :
将命名空间的ID配置到我们的项目中,修改配置文件:
spring:
application:
name: nacos-config-client
profiles:
active: dev # 表示开发环境
# active: test # 表示测试环境
#active: info
cloud:
nacos:
discovery:
server-addr: 192.168.40.1:8848
config:
server-addr: 192.168.40.1:8848
file-extension: yaml
group: TEST_GROUP
namespace: c6e530b7-5d09-4a51-ad44-9b0c9e39fc11
主要添加了 group 和 namespace 两个配置,其中 namespace 就是对应上面的 命名空间ID ,group 我们在新建配置时,指定为 TEST_GROUP。
下面在myconfig的命名空间下,新建配置:
其中这里的分组Group就填写上面,我们在项目中配置的 TEST_GROUP,下面点击发布,并重启我们的项目。
在浏览器中访问: http://localhost:8080/config/getConfig
,查看控制台打印的信息:
已经读取到我们这个命名空间 和 分组下的配置信息。
喜欢的小伙伴可以关注我的个人微信公众号,获取更多学习资料!
以上是关于SpringCloud Alibaba 使用Nacos作为配置中心及配置隔离讲解的主要内容,如果未能解决你的问题,请参考以下文章
Day397.SpringCloud Alibaba -谷粒商城
SpringCloud学习 —— SpringCloud Alibaba Nacos服务注册和配置中心