3. SpringCloudAlibaba、nacos 实现配置中心

一、微服务中配置文件的问题

3. SpringCloudAlibaba、nacos 实现配置中心_第1张图片

1.1 配置文件的问题:

  1. 配置文件的数量会随着服务的增加持续递增
  2. 单个配置文件无法区分多个运行环境
  3. 配置文件内容无法动态更新,需要重启服务

1.2 引入配置中心

引入配置中心:刚才架构就会成为这样。是由配置中心统一管理
3. SpringCloudAlibaba、nacos 实现配置中心_第2张图片

  1. 统一配置文件管理
  2. 提供统一标准接口,服务根据标准接口自行拉取配置
  3. 支持动态更新的到所有服务

二、Nacos Config数据模型

Nacos Config数据模型

3. SpringCloudAlibaba、nacos 实现配置中心_第3张图片

数据模型最佳实践

Namespace 代表不同的运行环境:Dev/Test/Prod
Group 代表某一类配置,比如中间件配置、数据库配置
Datald 某个项目中具体的配置文

三、nacos实现配置中心

3.1 父pom或者子项目添加依赖

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

3.2 配置文件改成 bootstrap.yml

spring:
  application:
    name: product-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848
 		# 配置文件的类型 我们找 yaml 
        file-extension: yaml
        # 命名空间的 id 
        namespace: 89b87df8-4e58-4363-a11a-ff1863b6f5fb
        # nacos里面没有 group区分 默认的 DEFAULT_GROUP 就可以
        group: DEFAULT_GROUP

3.3 设置从配置中心获取redis的配置信息

1.nacos添加配置

3. SpringCloudAlibaba、nacos 实现配置中心_第4张图片

2.添加配置信息

3. SpringCloudAlibaba、nacos 实现配置中心_第5张图片

3.添加获取redis信息 java代码

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;

@Data
@Component
@RefreshScope  // 刷新配置注解  如果nacos里面的配置变更了  项目里的配置也会跟着刷新
@ConfigurationProperties(prefix = "redis")
public class RedisConfig {

    private String host;

    private String port;

    private String password;

}

4.测试

3. SpringCloudAlibaba、nacos 实现配置中心_第6张图片

四、 nacos中的扩展配置和共享配置

4.1 扩展配置

extension-configs:extension-configs 是 Nacos 支持的一种扩展配置方式。通过配置 extension-configs,可以将指定的配置文件作为扩展配置,用于补充服务配置。扩展配置与服务配置是相互独立的,扩展配置不会直接影响服务的正常运行。它可以用于提供一些额外的配置项,例如自定义的拓展属性或配置文件,供服务在需要时进行访问和使用

springboot 中 properties 文件配置如下:

#支持一个应用有多个DataId配置,mybatis.yaml datasource.yaml
# extension-configs 和 shared-configs 都是个列表,默认从0开始配置 如果还有就是 [1]
spring.cloud.nacos.config.extension-configs[0].data-id=datasource.yaml
#可以不配置,使用默认
spring.cloud.nacos.config.extension-configs[0].group=DEFAULT_GROUP
#这里需要设置为true,动态可以刷新,默认为false
spring.cloud.nacos.config.extension-configs[0].refresh=true

4.2 共享配置

shared-configs:shared-configs 是 Nacos 支持的一种共享配置方式。通过配置 shared-configs,可以将指定的配置文件作为共享配置,供多个服务实例共享使用。共享配置可以被多个服务实例同时订阅和读取,这样可以实现配置的集中管理和共享。在配置中心中创建共享配置后,服务实例可以订阅共享配置,并根据需要获取最新的配置数据

场景:

上面我们已经演示了配置中心获取配置了,现在有这么一个场景,上面我们在product服务配置了一个redis,现在我们的order服务也需要使用redis,他俩使用的redis,还是同一个,那我是不是order上面也同样加上redis的配置信息,但是如果使用的服务多了,是不是每个服务都要加,那我们能不能加一个公共的配置,让他们共享呢?

1.nacos配置信息

3. SpringCloudAlibaba、nacos 实现配置中心_第7张图片
product-service 里面只有一个 name配置项
3. SpringCloudAlibaba、nacos 实现配置中心_第8张图片

而redis里面的配置 我们放到了
redis.yaml 当中
3. SpringCloudAlibaba、nacos 实现配置中心_第9张图片

2.java代码配置如下

spring:
  application:
    name: product-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848
        file-extension: yaml
        namespace: 89b87df8-4e58-4363-a11a-ff1863b6f5fb
        group: DEFAULT_GROUP
        shared-configs:
          #  shared-configs  使用列表时,可以使用短横线(-)作为列表项的标记
          #  相当于 配置 这样 
          # spring.cloud.nacos.config.shared-configs[0].data-id= common.yaml
          # spring.cloud.nacos.config.shared-configs[0].refresh=true
          - dataId: redis.yaml
            # 这里需要设置为true,动态可以刷新,默认为false
            refresh: true

3.测试

3. SpringCloudAlibaba、nacos 实现配置中心_第10张图片

你可能感兴趣的:(java,微服务,spring,cloud)