云计算百科
云计算领域专业知识百科平台

Nacos-配置中心

目录

配置中心示意图

配置中心-基本使用

步骤一:启动nacos

步骤二:引入依赖

步骤三:application.properties配置

步骤四:创建data-id(数据集)

配置中心-动态刷新

配置中心-配置监听

思考:Nacos中的数据集和application.properties有相同的配置,那个生效?

配置中心-数据隔离

namespace区分多环境

需求描述

难点

动态切换环境

总结

注册中心

配置中心

配置中心示意图

配置中心-基本使用

步骤一:启动nacos

详细操作可以看我前几篇文章nacos-注册中心、服务注册

步骤二:引入依赖

在services的pom文件引入依赖:

<!– 引入配置中心依赖–>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

步骤三:application.properties配置

以订单为例,首先在service-order的application.properties中加入一行

spring.config.import=nacos:service-order.properties

表示在项目启动时导入service-order.properties,并在service-order.properties里面写入配置。完整代码如下所示:

spring.application.name=service-order
server.port=8000

spring.cloud.nacos.server-addr=127.0.0.1:8848

spring.config.import=nacos:service-order.properties

步骤四:创建data-id(数据集)

代码添加完成后启动项目,打开nacos配置管理的配置列表

新建一个配置,名字与上述配置名相同,配置格式为properties,写入配置内容:

点击发布之后,在配置管理界面就可以看到一条配置。

配置完成后,可以对其做一个测试:在service-order的controller中编写一个方法,获取并返回配置的值:

@Value("${order.timeout}")
String orderTimeout ;
@Value("${order.auto-confirm}")
String orderAutoConfirm;

/**
* 返回获取配置的值
* @return
*/
@GetMapping("/config")
public String config(){
return "order.timeout:" + orderTimeout + " order.auto-confirm:" + orderAutoConfirm;
}

测试效果如下:

接着我们修改naocs里面的配置参数,前端重新访问时,并不能改成我们新改的参数值,此时需要在controller中加入@RefreshScope注解,之后即可自动刷新,自行测试,不再赘述。

这样配置之后就可以实现自动刷新。

配置中心-动态刷新

上一个方法详细描述了步骤一的实现,接下来对步骤二进行描述。

1.在service-order新建一个OrderProperties类,可以实现配置批量绑定。

package com.atguigu.order.properties;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@Data
@ConfigurationProperties(prefix = "order")//配置批量绑定在nacos下,可以无需@RefreshScope就可实现
public class OrderProperties {
String Timeout ;
String AutoConfirm;
}

2.修改controller将获取并返回配置的方法,并将controller的@RefreshScope注解注掉。

// @Value("${order.timeout}")
// String orderTimeout ;
// @Value("${order.auto-confirm}")
// String orderAutoConfirm;

/**
* 返回获取配置的值
* @return
*/
@GetMapping("/config")
public String config(){
return "order.timeout:" + orderProperties.getTimeout() + " order.auto-confirm:" + orderProperties.getAutoConfirm();
}

3.测试发现同样可以实现自动刷新。

配置中心-配置监听

在service-order中编写:

//1.项目启动就监听配置文件变化
//2.发生变化后拿到变化值
//3.发送邮件

@Bean
ApplicationRunner applicationRunner(NacosConfigManager nacosConfigManager) {
return args -> {
ConfigService configService = nacosConfigManager.getConfigService();
configService.addListener("order.properties", "DEFAULT_GROUP", new Listener() {
@Override
public Executor getExecutor() {
return Executors.newFixedThreadPool(4);
}

@Override
public void receiveConfigInfo(String configInfo) {
System.out.println("变化的配置项:"+ configInfo);
System.out.println("发送邮件");
}
});
System.out.println("==============");
};
}

项目启动就可以监听配置了。

思考:Nacos中的数据集和application.properties有相同的配置,那个生效?

先导入优先、外部优先

配置中心-数据隔离

namespace区分多环境

需求描述

1.项目有多套环境:dev,test,prod 2.每个微服务,同一种配置,在每套环境的值都不一样。

  • 如:database.properties
  • 如:common.properties

3.项目可以通过切换环境,加载本环境的配置

难点

  • 区分多套环境
  • 区分多种微服务
  • 区分多种配置
  • 按需加载配置

在nacos的命名空间新建一个开发的命名空间

创建好不同的命名空间之后,可以在配置管理中配置不同命名空间的配置:

动态切换环境

1.将之前resources路径下的application.properties里的内容注掉

2.在resources路径下新建一个文件application.yml,将所有配置写到这个文件里。

server:
port: 8000
spring:
profiles:
active: test
application:
name: server-order
cloud:
nacos:
server-addr: 127.0.0.1:8848
config:
import-check:
enabled: false
namespace: ${spring.profiles.active:dev}


spring:
config:
import:
– nacos:common.properties?group=order
– nacos:database.properties?group=order
activate:
on-profile: dev

spring:
config:
import:
– nacos:common.properties?group=order
– nacos:database.properties?group=order
– nacos:haha.properties?group=order
activate:
on-profile: test


spring:
config:
import:
– nacos:common.properties?group=order
– nacos:database.properties?group=order
– nacos:hehe.properties?group=order
activate:
on-profile: prod

项目启动之后,即可实现动态切换环境。

总结

注册中心

1.引入 spring-cloud-starter-alibaba-nacos-discovery依赖,配置Nacos地址

2.@EnableDiscoveryClient 开启服务发现功能

扩展 1.DiscoveryClient获取服务实例列表

2.LoadBalancerClient 负载均衡选择一个实例(需要引入 spring-cloud-starter-loadbalancer)

3.RestTemplate 可以发起远程调用

配置中心

1. 引入 spring-cloud-starter-alibaba-nacos-config依赖,配置Nacos地址

2. 添加数据集(data-id),使用spring.config.import 导入数据集

3.@Value + @RefreshScope 取值+自动刷新

4.@ConfigurationProperties批量绑定自动刷新

5.NacosConfigManager 监听配置变化

扩展:

配置优先级;namespace区分环境、group区分微服务、data-id区分配置

实现 数据隔离+环境切换

赞(0)
未经允许不得转载:网硕互联帮助中心 » Nacos-配置中心
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!