nacos注册中添加自定义元数据
nacos客户端版本:1.4
nacos注册时可以自定义一些元数据来标记当前节点的特有信息。最近做了一个灰度的功能便是基于这个东西做的,顺便找了几个配置方式。
nacos中元数据可以在控制台看到:
1 基于配置文件
1.1 配置文件增加相关配置
spring:
cloud:
nacos:
discovery:
metadata.test: test1
1.2 运行效果
可以看到元数据已经显示在控制台中
2 基于自动装配实现
配置文件实现的方式相对比较依赖编码,不太灵活。如果使用环境变量的话,则依赖于运维配置。查阅源码找到注册时获取元数据的类,再覆盖它就能更灵活的实现自己想要的功能了。
2.1 编写代码
nacos中获取元数据的配置类是NacosDiscoveryClientConfiguration这个,覆盖它就行了。
自定义装配类:
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.net.NetUtil;
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.alibaba.cloud.nacos.NacosServiceManager;
import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration;
import com.alibaba.cloud.nacos.discovery.NacosWatch;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import java.util.HashMap;
import java.util.Map;
@Configuration
@AutoConfigureBefore({NacosDiscoveryClientConfiguration.class})
public class MyNacosDiscoveryConfiguration {
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(value = "spring.cloud.nacos.discovery.watch.enabled",
matchIfMissing = true)
public NacosWatch nacosWatch(NacosServiceManager nacosServiceManager, NacosDiscoveryProperties nacosDiscoveryProperties, ObjectProvider<ThreadPoolTaskScheduler> taskExecutorObjectProvider) {
//原来的元数据全部不变
Map<String, String> metadata = nacosDiscoveryProperties.getMetadata();
if(metadata==null){
metadata = new HashMap<>();
nacosDiscoveryProperties.setMetadata(metadata);
}
metadata.put("test", "test1");
return new NacosWatch(nacosServiceManager,nacosDiscoveryProperties, taskExecutorObjectProvider);
}
}
2.2 增加自动装配
然后在自己的spring.factories加上这个类就行了
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.dong.common.gray.config.MyNacosDiscoveryConfiguration