小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
从三个方面深入源码:
- 服务注册
- 服务地址的获取
- 服务地址变化的感知
在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不存在,则使用默认值,是一种高可用的策略,在实际应用中,需要考虑在配置中心不可用下如何保证服务的可用性。
近期评论