某项目中需要在nacos启动时修改服务元数据和实例的元数据。这里做下记录。
@Slf4j
@Configuration
@ConditionalOnNacosDiscoveryEnabled
@AutoConfigureBefore({SimpleDiscoveryClientAutoConfiguration.class, CommonsClientAutoConfiguration.class})
public class NacosConfiguration implements ApplicationListener<InstanceRegisteredEvent<?>>{
@Value("${spring.application.name}")
private String applicationName;
@Resource
NacosServiceManager nacosServiceManager;
@Resource
NacosDiscoveryProperties nacosDiscoveryProperties;
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(value = {"spring.cloud.nacos.discovery.watch.enabled"}, matchIfMissing = true)
public NacosWatch nacosWatch( WebApplicationContext webApplicationContext) throws NacosException {
// 更新实例元数据,里面需要填写实例的信息
nacosDiscoveryProperties.getMetadata().put("instanceInfo", "aa");
return new NacosWatch(nacosServiceManager, nacosDiscoveryProperties);
}
@Override
public void onApplicationEvent(InstanceRegisteredEvent<?> event) {
try {
// nacos 更新服务的元数据信息
Properties nacosProperties = nacosDiscoveryProperties.getNacosProperties();
NamingMaintainService namingMaintainService = nacosServiceManager.getNamingMaintainService(nacosProperties);
Map<String, String> serviceMetadata = new HashMap<>();
serviceMetadata.put("serviceInfo", "bb");
namingMaintainService.updateService(applicationName, nacosDiscoveryProperties.getGroup(), 0, serviceMetadata);
log.debug("服务元数据更新成功");
} catch (NacosException e) {
throw new RuntimeException(e);
}
}
}