基于Nacos SDK演示微服务中使用演示
基于Nacos SDK演示这里使用的Nacos服务端是1.4.2版本
引入Nacos-client类库
com.alibaba.nacos nacos-client1.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-config2.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某配置文件变动后,会推送全量配置内容到监听器,而不是增量。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)