java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java SDK获取监听nacos配置信息

Java SDK获取和监听nacos配置信息的方法

作者:eggcode

本文手把手教你解决Nacos配置获取为null的常见问题,提供Java示例代码快速上手配置中心,并演示如何监听配置变化实现自动更新,从新建Maven项目到运行成功,涵盖版本兼容性、端口映射等关键步骤,助你轻松集成Nacos,需要的朋友可以参考下

手动新建配置用于测试

输入一些配置内容:

k1=v1
spring.datasource.username=ken
spring.datasource.password=123456

点击发布:

查看,点击【示例代码】,查看Java示例代码:

curl方式访问配置

curl -X GET "http://223.2.35.53:8848/nacos/v1/cs/configs?dataId=test&group=DEFAULT_GROUP"

可以获得前面在nacos中配置的内容。说明服务端的接口没问题。

工程示例:获取nacos配置

新建一个maven工程。

增加nacos客户端依赖

在pom.xml中添加:

        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>2.1.1</version>
        </dependency>

获取配置的Java代码

基于上面的示例代码,只是简化了:

import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.PropertyKeyConst;
import java.util.Properties;
public class Main {
    public static void main(String[] args) throws Exception {
        String serverAddr = "localhost:8848";
        String dataId = "test";
        String group = "DEFAULT_GROUP";
        Properties properties = new Properties();
        properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);
        ConfigService configService = NacosFactory.createConfigService(properties);
        String content = configService.getConfig(dataId, group, 2000);
        System.out.println("SDK result: '\n" + content + "'");
    }
}

直接运行,报错缺少org.slf4j.LoggerFactory

修改pom.xml引入slf4j

通过增加springboot相关,间接引入日志:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.example</groupId>
    <artifactId>test-java</artifactId>
    <version>1.0-SNAPSHOT</version>
    <parent>
        <artifactId>spring-boot-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.6.5</version>
    </parent>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>2.1.1</version>
        </dependency>
    </dependencies>
</project>

获取的nacos配置信息为null

方案1

引入的nacos的jar包版本是2.1.1,但是运行上面代码,获取nacos配置信息为null,即的content为null。
解决方法即降低jar包版本为1.4.4

方案2

docker创建容器时多映射两个端口:

  -p 9848:9848 \    # 关键:暴露 gRPC 端口
  -p 9849:9849 \    # 关键:暴露 gRPC 服务端端口

这样可以用 Nacos 2.x 的新特性(如配置监听、长连接优势)。

成功获取配置信息

运行java代码,成功获取nacos的配置信息:

工程示例:监听nacos配置的变化

在前面工程的基础上,修改Java代码:

import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.PropertyKeyConst;
import com.alibaba.nacos.api.config.listener.Listener;
import java.util.Properties;
import java.util.concurrent.Executor;
public class Main {
    public static void main(String[] args) throws Exception {
        String serverAddr = "localhost:8848";
        String dataId = "test";
        String group = "DEFAULT_GROUP";
        Properties properties = new Properties();
        properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);
        ConfigService configService = NacosFactory.createConfigService(properties);
        String content = configService.getConfig(dataId, group, 2000);
        System.out.println("SDK result: '\n" + content + "'");
        //监听配置变化
        configService.addListener(dataId, group, new Listener() {
            @Override
            public Executor getExecutor() {
                return null;
            }
            @Override
            public void receiveConfigInfo(String s) {
                System.out.println("receiveConfigInfo");
                System.out.println(s);
            }
        });
        System.in.read();//避免程序结束
    }
}

然后修改nacos服务端上的配置信息,重新发布。
客户端监听到配置信息变化后,自动将其打印。

以上就是Java SDK获取和监听nacos配置信息的方法的详细内容,更多关于Java SDK获取监听nacos配置信息的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文