SpringBoot 集成 Nacos实现统一配置管理

SpringBoot集成Nacos实现统一配置管理

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

从三个方面深入源码:

  • 服务注册
  • 服务地址的获取
  • 服务地址变化的感知

在Spring-Cloud-Common包中有一个类org.springframework.cloud.client.serviceregistry.ServiceRegistry,它是SpringCloud提供的服务注册的标准,集成到SpringCloud实现服务注册的组件,都会实现该接口。

public interface ServiceRegistry<R extends Registration>{
	void registry(R registration);
	void deregistry(R registration);
	void close();
	void setStatus(R registration,String status);
	<T> T getStatus(R registration);
}
复制代码

而这个接口的实现类是com.alibaba.cloud.nacos.registry.NacosServiceRegistry,它什么时候触发服务注册动作?

Spring Cloud集成Nacos的实现过程

在Spring-cloud-commons包的META-INF/spring.factories中包含自动装配信息如下:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.cloud.client.CommonsClientAutoConfiguration=\
org.springframework.cloud.client.ReactiveCommonsClientAutoConfiguration=\
复制代码

SpringBoot集成Nacos实现统一配置管理

  • 创建一个SpringBoot项目,并集成Nacos配置中心

  • 添加Nacos Config maven依赖

<dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>nacos-config-spring-boot-starter</artifactId>
            <version>0.2.4</version>
        </dependency>
复制代码

在application.yml中添加Nacos Server的地址

 nacos:
  	config:
     server-addr: 127.0.0.1:8848
复制代码

创建NacosConfigController类,用于从Nacos Server动态读取配置

@NacosPropertySource(dataId = "server1",autoRefreshed = true)
@RestController
public class NacosConfigController {

    @NacosValue(value = "${info:local}",autoRefreshed = true)
    private String info;

    @GetMapping("config")
    public String getConfig(){
        return info;
    }
}
复制代码

Nacos注解说明:

  • @NacosPropertySource,用于加载dataId为server1的配置源,autoRefreshed标识开启自动更新
  • @NacosValue:设置属性的值,其中info表示key,而Local代表默认值,如果key不存在,则使用默认值,是一种高可用的策略,在实际应用中,需要考虑在配置中心不可用下如何保证服务的可用性。

猜你喜欢

转载自juejin.im/post/7017614332410363935