一、微服务中配置文件的问题
1.1 配置文件的问题:
- 配置文件的数量会随着服务的增加持续递增
- 单个配置文件无法区分多个运行环境
- 配置文件内容无法动态更新,需要重启服务
1.2 引入配置中心
引入配置中心:刚才架构就会成为这样。是由配置中心统一管理
- 统一配置文件管理
- 提供统一标准接口,服务根据标准接口自行拉取配置
- 支持动态更新的到所有服务
二、Nacos Config数据模型
Nacos Config数据模型
数据模型最佳实践
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添加配置
2.添加配置信息
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.测试
四、 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配置信息
product-service 里面只有一个 name配置项
而redis里面的配置 我们放到了
redis.yaml 当中
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