05 微服务组件 - Nacos配置中心

181 阅读2分钟

1. Nacos配置中心使用

官方文档: github.com/alibaba/spr…

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

1.维护性 2.时效性 3.安全性 image.png

常见配置中心对比: image.png nacos config使用长轮询更新配置,一旦配置有变动后,通知Provider的过程非常的迅速,从速度上秒杀springcloud 原来的config几条街!

2. 快速开始

Nacos SpringCloud快速开始

  1. 在nacos server中新建business.properties配置文件; image.png 配置推荐: image.png

  2. 引入nacos-config依赖;

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    
  3. 在bootstrap.properties中配置Nacos server的地址和应用名;

    spring.cloud.nacos.config.server-addr=192.168.1.10:8847
    # 会自动根据服务名拉取dataId对应的配置文件
    spring.application.name=order-service
    
  4. 启动服务,测试。

    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);
    }
    

    image.png

3. config相关配置

nacos数据模型Key由三元组唯一确定,Namespace默认是空串,公共命名空间(public),分组默认是  DEFAULT_GROUP。 image.png

  1. 支持自定义namespcace的配置;

    不同的命名空间下,可以存在相同的Group或DataID的配置,Namespace的常用场景之一是不同环境的配置的区分隔离。在没有指定配置的情况下,默认使用的是Public这个namespace。自定义命名空间配置:

    spring.cloud.nacos.config.namespace=dev
    
  2. 支持自定义Group的配置; 在没有明确指定${spring.cloud.nacos.config.group}配置的情况下,默认是DEFAULT_GROUP。自定义配置:

    spring.cloud.nacos.config.group=DEFAULT_GROUP
    
  3. 支持自定义扩展的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 配置实时更新原理分析 image.png