1. Nacos配置中心使用
官方文档: github.com/alibaba/spr…
Nacos提供用于存储配置和其他元数据的key/value存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用SpringCloud Alibaba NacosConfig,您可以在Nacos Server集中管理你SpringCloud应用的外部属性配置。
1.维护性 2.时效性 3.安全性
常见配置中心对比:
nacos config使用长轮询更新配置,一旦配置有变动后,通知Provider的过程非常的迅速,从速度上秒杀springcloud 原来的config几条街!
2. 快速开始
-
在nacos server中新建business.properties配置文件;
配置推荐:
-
引入nacos-config依赖;
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> -
在bootstrap.properties中配置Nacos server的地址和应用名;
spring.cloud.nacos.config.server-addr=192.168.1.10:8847 # 会自动根据服务名拉取dataId对应的配置文件 spring.application.name=order-service -
启动服务,测试。
public static void main(String[] args) { ConfigurableApplicationContext applicationContext = SpringApplication.run(OrderApp.class, args); String name = applicationContext.getEnvironment().getProperty("user.name"); String age = applicationContext.getEnvironment().getProperty("user.age"); System.out.println(name + "-"+ age); }
3. config相关配置
nacos数据模型Key由三元组唯一确定,Namespace默认是空串,公共命名空间(public),分组默认是 DEFAULT_GROUP。
-
支持自定义namespcace的配置;
不同的命名空间下,可以存在相同的Group或DataID的配置,Namespace的常用场景之一是不同环境的配置的区分隔离。在没有指定配置的情况下,默认使用的是Public这个namespace。自定义命名空间配置:
spring.cloud.nacos.config.namespace=dev -
支持自定义Group的配置; 在没有明确指定${spring.cloud.nacos.config.group}配置的情况下,默认是DEFAULT_GROUP。自定义配置:
spring.cloud.nacos.config.group=DEFAULT_GROUP -
支持自定义扩展的DataId配置...
4. @RefreshScope注解
@Value注解可以获取到配置中心的值,但是无法动态感知修改后的值,需要利用@RefreshScope注解。
@Slf4j
@RestController
@RefreshScope
@RequestMapping("/order")
public class ConfigController {
@Value("${user.name}")
private String userName;
@PostMapping("/config")
public void config(@RequestBody Object obj) throws InterruptedException {
log.debug("nacos config获取,req={}", JSON.toJSON(obj));
while (true) {
System.out.println(userName);
TimeUnit.SECONDS.sleep(1);
}
}
}
扩展:
-
长连接、短连接、长轮询、短轮询、WebSocket释疑(
长、短连接是客户端与服务端建立和保持TCP连接的机制;而长、短轮询是指客户端请求服务端,服务端给予应答的方式)- 短连接:每次Http请求都会建立Tcp连接,管理容易;
- 长连接:只需要建立一次Tcp连接,以后Http请求重复使用同一个Tcp连接,管理难;
- 短轮询:重复发送Http请求,查询目标事件是否完成,优点:编写简单,缺点:浪费带宽和服务器资源;
- 长轮询:
在服务端hold住Http请求(死循环或者sleep等等方式),等到目标时间发生(保持这个请求等待数据到来或者恰当的超时),返回Http响应。优点:在无消息的情况下不会频繁的请求,缺点:编写复杂。
-
nacos的配置是如何实时推送的? # Nacos配置更新原理 # Nacos 配置实时更新原理分析