SpringCloud整合Nacos配置中心

凯哥java

共 4783字,需浏览 10分钟

 ·

2023-08-08 12:50

❤️《SpringCloud入门实战系列》解锁SpringCloud主流组件入门应用及关键特性。带你了解SpringCloud主流组件,是如何一战解决微服务诸多难题的。

❤️关注我,不迷路,你的支持是我最大的动力。

❤️再小的收获x365天都会成就不一样的自己,一起学习,一起进步。

  一、Nacos  

Nacos 作为分布式微服务架构体系中的一个优秀组件,可以替代Eureka做服务注册中心,可以替代Config做服务配置中心。让微服务的发现、管理、共享、组合更加容易。Nacos = Eureka + Config + bus

Nacos作为服务注册中心参看:Nacos+SpringBoot+openFeign项目集成 

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

   二、Nacos 服务端初始化  

下载并启动好Nacos Server。启动方式参看Nacos简介、安装、运行详解 。接下来在 Nacos 的控制台新增一个dataId为yaml为扩展名的配置,如下所示:


注意📢:dataId是以 properties(默认的文件扩展名方式)为扩展名,也可以支持yaml/yml。

   三、Nacos客户端配置  

1、添加依赖

父pom中引入spring-cloud-alibaba-dependencies依赖后,子pom中引入spring-cloud-starter-alibaba-nacos-config依赖:

  <dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

注意:如果想使用bootstrap文件配置,springboot2.4以后的版本需要添加spring-cloud-starter-bootstrap依赖:

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

2、启动类

@SpringBootApplication
@ComponentScan(basePackages = {"com.qytest"})
@MapperScan(basePackages = {"com.qytest.**.dao"})
@EnableDiscoveryClient
public class CloudPayment {
public static void main(String[] args) {
SpringApplication.run(CloudPayment.class, args);
}
}

Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能,作为配置中心时不加也可以。

3、yml配置

在日常开发中如果遇到多套环境下的不同配置,可以通过Spring 提供的 ${spring.profiles.active} 这个配置项来配置。所以这里我们使用多环境配置文件。

bootstrap.yml(用来指定激活的环境)

spring:
profiles:
active: dev

bootstrap-dev.yml(注意层级关系)

server:
port: 8001

spring:
application:
name: cloud-payment #微服务应用的名字
datasource:
type: com.alibaba.druid.pool.DruidDataSource #当前数据源操作类型
driver-class-name: com.mysql.jdbc.Driver #mysql驱动包
url: jdbc:mysql://localhost:3306/test?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false #useSSL安全加固
username: root
password: 12345678
cloud:
nacos:
discovery:
# 配置 nacos 的服务地址
server-addr: http://localhost:8848
config:
## nacos 作为配置中心地址
server-addr: ${spring.cloud.nacos.discovery.server-addr}
## 指定yaml格式的配置,默认为:properties
file-extension: yaml
## 分组 默认为:DEFAULT_GROUP
## group: DEFAULT_GROUP
## 命名空间 默认为 public
## namespace: public

management:
endpoints:
web:
exposure:
include: '*'

mybatis-plus:
mapper-locations: classpath*:mapper/**/*.xml
#实体扫描,多个package用逗号或者分号分隔
typeAliasesPackage: com.qytest.springcloud.entitites

dataid 规则 :
$ {prefix}-$ {spring.profiles.active}.$ {file-extension}
$ {spring.application.name}-$ {spring.profiles.active}.${file-extension}

所以本例中应该去nacos拉取dataid为cloud-payment-dev.yaml的配置。也就是开头Nacos 服务端初始化我们创建的配置。

注意📢:当使用域名的方式来访问 Nacos 时,spring.cloud.nacos.config.server-addr 配置的方式为 域名:port。例如 Nacos 的域名为abc.com.nacos,监听的端口为 80,则 spring.cloud.nacos.config.server-addr=abc.com.nacos:80。注意 80 端口不能省略。

4、测试

编写简单的业务类ConfigController.java,添加自动刷新注解@RefreshScope

@RestController
@RefreshScope
public class ConfigController {
//从nacos读取配置文件中内容
@Value("${config.info}")
private String configInfo;

@GetMapping("/config/info")
public CommonResult<String> getConfigInfo() {
return new CommonResult<>(200, "success", configInfo);
}
}

Spring Cloud 原生注解 @RefreshScope 实现配置自动更新。再学习SpringCloud Config配置中心时提到过这个注解。

访问http://localhost:8001/config/info 成功读取到nacos界面配置的文件中的内容。

Nacos支持配置的动态更新。也可以通过配置 spring.cloud.nacos.config.refresh.enabled=false 来关闭动态刷新

  四、自定义配置   

1、自定义Namespace(默认Public)

关于Nacos 的 Namespace 用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。默认使用的是 Nacos 上 Public 这个namespace。

如果需要使用自定义的命名空间,可以通过以下配置来实现:


spring:
cloud:
nacos:
config:
namespace: cca3ee80-0eb9-4813-9284-55b975ef2640

2、自定义 Group 配置(默认DEFAULT_GROUP)

  cloud:
nacos:
discovery:
config:
group: MY_GROUP

3、自定义扩展的 Data Id 配置

Spring Cloud Alibaba Nacos Config 从 0.2.1 版本后,可支持自定义 Data Id 的配置。
通过自定义扩展的 Data Id 配置,既可以解决多个应用间配置共享的问题,又可以支持一个应用有多个配置文件。

Spring Cloud Alibaba Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置。

A: 通过 spring.cloud.nacos.config.shared-configs[n].data-id 支持多个共享 Data Id 的配置

B: 通过 spring.cloud.nacos.config.extension-configs[n].data-id 的方式支持多个扩展 Data Id 的配置

C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置

当三种方式共同使用时,他们的一个优先级关系是:A < B < C

浏览 55
点赞
评论
收藏
分享

手机扫一扫分享

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

手机扫一扫分享

分享
举报