nacos java api

nacos-client 支持开发者动态维护、实时监听 nacos 配置中心

最下方附了常见的应用场景,在此之前,我们先掌握下 nacos client 提供的API:

添加 gradle 依赖

gradle 引入

// https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client
compile group: 'com.alibaba.nacos', name: 'nacos-client', version: '1.1.4'

获取配置

用于主动从 Nacos 获取配置

@PostConstruct
public void getConfig() {
    try {
        Properties properties = new Properties();
        properties.put("serverAddr", serverAddr);
        ConfigService configService = NacosFactory.createConfigService(properties);
        String content = configService.getConfig(dataId, group, 5000);
        System.out.println(content);
    } catch (NacosException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

监听配置

如果希望 Nacos 推送配置变更,可以使用 Nacos 动态监听配置接口来实现。

@PostConstruct
public void addListener() throws NacosException {
    Properties properties = new Properties();
    properties.put("serverAddr", serverAddr);
    ConfigService configService = NacosFactory.createConfigService(properties);
    configService.addListener(dataId, group, new Listener() {
        @Override
        public void receiveConfigInfo(String configInfo) {
            System.out.println("recieve1:" + configInfo);
        }
        @Override
        public Executor getExecutor() {
            return null;
        }
    });
}

移除、监听配置

取消监听配置,取消监听后配置不会再推送。

@PostConstruct
public void removeListener() throws NacosException {

    //通常你应该通过 spring 容器管理起来
    //我只是做一个示例,为了不让这段代码编译报错
    Listener listener = null;

    Properties properties = new Properties();
    properties.put("serverAddr", serverAddr);
    ConfigService configService = NacosFactory.createConfigService(properties);
    configService.removeListener(dataId, group, listener);
}

发布配置

用于通过程序自动发布 Nacos 配置,以便通过自动化手段降低运维成本。

创建和修改配置时使用的同一个发布接口,当配置不存在时会创建配置,当配置已存在时会更新配置

@PostConstruct
public void publishConfig(){
    try {
        Properties properties = new Properties();
        properties.put("serverAddr", serverAddr);
        ConfigService configService = NacosFactory.createConfigService(properties);
        boolean isPublishOk = configService.publishConfig(dataId, group, "baidumap: \n" +
                "    appkey: 123\n" +
                "    appsec: 789");
        System.out.println(isPublishOk);
    } catch (NacosException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

删除配置

用于通过程序自动删除 Nacos 配置,以便通过自动化手段降低运维成本。

注意: 当配置已存在时会删除该配置,当配置不存在时会直接返回成功消息

@PostConstruct
public void removeConfig(){
    try {
        Properties properties = new Properties();
        properties.put("serverAddr", serverAddr);
        ConfigService configService = NacosFactory.createConfigService(properties);
        boolean isRemoveOk = configService.removeConfig(dataId, group);
        System.out.println(isRemoveOk);
    } catch (NacosException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

解析 yaml

我们使用 snakeyaml 来解析,你需要在 gradle 添加依赖:

// https://mvnrepository.com/artifact/org.yaml/snakeyaml
compile group: 'org.yaml', name: 'snakeyaml', version: '1.26'

编写 snakeyaml 工具类

public class YamlUtil {

    public static <T> T parse(Class clazz, String yaml) {
        return new Yaml(new Constructor(clazz)).load(yaml);
    }
}

建立 dto 方便使用,你也可以用 map

public class BaidumapDto {

    private String appkey;

    private String appsec;

    // get\set略
}

获取配置,并且解析

@PostConstruct
public void handleYaml(){
    try {
        Properties properties = new Properties();
        properties.put("serverAddr", serverAddr);
        ConfigService configService = NacosFactory.createConfigService(properties);
        String content = configService.getConfig(dataId, group, 5000);
        System.out.println(content);
        BaidumapDto baidumapDto = YamlUtil.parse(BaidumapDto.class, content);
        System.out.println(baidumapDto.getAppkey());
    } catch (NacosException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

应用场景

常见的应用场景是 admin 用户在应用系统管理面板动态修改某构件的运行参数

实现流程:

  • 管理员打开配置页面
  • 后台连接 nacos 获取配置参数
  • 管理员修改配置参数,点击提交
  • 后台连接 nacos 并且提交修改后的参数

最后,修改后的配置如何生效?

结合实际情况,有些简单的情况(比如 @value )会自动实时生效的;

对于特殊情况无法实时更新生效的,通过注册监听程序来实现:

1、监听激活 -> 2、获取修改后的参数 -> 3、做yaml解析 -> 4、修改构件运行参数


转载请注明来源。 欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。 可以在下面评论区评论,也可以邮件至 sharlot2050@foxmail.com。

文章标题:nacos java api

字数:908

本文作者:夏来风

发布时间:2020-07-22, 22:47:39

原始链接:http://www.demo1024.com/blog/nacos-client-api/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。