小试牛刀之Nacos如何使用

小试牛刀之Nacos如何使用,第1张

小试牛刀之Nacos如何使用

文章目录

基于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某配置文件变动后,会推送全量配置内容到监听器,而不是增量。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5716649.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存