基于Nacos SDK演示微服务中使用演示
基于Nacos SDK演示这里使用的Nacos服务端是1.4.2版本
引入Nacos-client类库
com.alibaba.nacos nacos-client 1.4.2
访问localhost:8848/nacos,在命名空间处 创建新的命名空间 【test】
在test命名空间下 创建文件
public static void main(String[] args) throws NacosException, IOException {
String dataId = "nacos-simple-demo.yaml";
String group = "DEFAULT_GROUP";
Properties prop=new Properties();
//指定nacos服务地址
prop.put("serverAddr","127.0.0.1:8848");
//指定namespace
prop.put("namespace","ad77ed68-20f8-4b2b-91fd-1105df209258");
ConfigService configService = NacosFactory.createConfigService(prop);
//获取指定配置文件的内容
String content = configService.getConfig(dataId, group, 5000);
//从nacos中取配置内容
System.out.println(content);
//订阅nacos配置变更事件
configService.addListener(dataId, group, new Listener() {
@Override
public Executor getExecutor() {
return null;
}
@Override
public void receiveConfigInfo(String configInfo) {
System.out.println("updated content:" + configInfo);
}
});
//阻塞主线程
System.in.read();
}
上面代码做了两件事:
1、与Nacos建立连接之后,获取指定namespace+dataId+group下配置文件的内容
2、注册一个监听器,用于监听该配置文件内容的变化,会将变化后的内容全量推送到监听器receiveConfigInfo上
注意:
1、上面namespace 是对应我们新建的test命名空间的,默认情况下使用的是public命名空间,若使用public命名空间,则namespace选项可以不配置
2、configService.addListener 这个是监控配置变更事件,如果我们在nacos上修改了配置内容,那么nacos服务端会感知到并拉去最新内容到本地,并回调我们这个方法将最新内容推送给我们
微服务中使用演示在Spring Cloud微服务中,Nacos担负起了配置中心、服务注册与发现的职责,通常将Nacos的这些配置信息放到bootstrap.xml中,方便应用程序从Nacos中拉取配置属性以及服务的发布与发现。
其实可以根据项目实际需要来决定引用Nacos哪些包,比如我这里只想使用Nacos配置中心功能,那我可以引用
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
2.2.5.RELEASE
在我的bootstrap.yml文件中 可以这么配置
server:
port: 56010
spring:
cloud:
nacos:
config:
## Nacos集群地址
server-addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850
## 我配置文件的后缀名
file-extension: properties
## namespace
namespace: ad77ed68-20f8-4b2b-91fd-1105df209258
## group
group: DEFAULT_GROUP
## 一个应用使用多个配置文件 dataId一定不要忘记扩展名 同名的属性 若存在于多个属性文件中,
## 则按照配置顺序后面的属性内容会将前面的内容给替换
extension-configs:
- dataId: ext-config-common1.properties
refresh: true
- dataId: ext-config-common2.properties
refresh: true
- dataId: ext-config-common3.properties
refresh: false
application:
name: Nacos-Service-Demo
一般情况下,application.name 等同于 dataId,在Nacos页面上配置时留意下
另外,如果当前的nacos配置要引用其他的配置,可以使用extension-configs 将其他配置列出来,前提是这些配置要与当前的配置相同namespace
另外,如果在应用程序中需要获取或刷新Nacos配置内容,可以手动实现NacosConfigService
@Bean
@ConditionalOnMissingBean(ConfigService.class)
public ConfigService createConfigService(final CloudPrintNacosProperties nacosProp) throws NacosException {
Properties prop = new Properties();
prop.put(PropertyKeyConst.SERVER_ADDR, nacosProp.getServerAddr());
if (StringUtils.isNotBlank(nacosProp.getNamespace())) {
prop.put(PropertyKeyConst.NAMESPACE, nacosProp.getNamespace());
}
if (StringUtils.isNotBlank(nacosProp.getUsername())) {
prop.put(PropertyKeyConst.USERNAME, nacosProp.getUsername());
}
if (StringUtils.isNotBlank(nacosProp.getPassword())) {
prop.put(PropertyKeyConst.PASSWORD, nacosProp.getPassword());
}
return NacosFactory.createConfigService(prop);
}
@ConfigurationProperties(prefix = "config.nacos")
@Data
public class CloudPrintNacosProperties {
private String serverAddr;
private String namespace;
private String username;
private String password;
}
这样就可以在应用程序中使用NacosConfigService 去获取配置、刷新配置以及注册监听器了。
//获取配置 configService.getConfig(dataId, NacosConstants.GROUP, NacosConstants.DEFAULT_TIME_OUT); //更新配置 configService.publishConfig(dataId, NacosConstants.GROUP, JSON.toJSONString(data), ConfigType.YAML.getType()); //注册监听 config.addListener(String dataId, String group, Listener listener);
但是请注意,Nacos某配置文件变动后,会推送全量配置内容到监听器,而不是增量。



