nacos(二):原生java调用配置与服务实例

本文主要介绍原生java连接nacos,操作nacos的共享配置与服务实例。

1、引入依赖

复制代码
<dependencies>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>2.5.0</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>2.0.16</version>
        </dependency>
</dependencies>
复制代码

注意:一定要引入slf4j

 

2、操作配置

复制代码
package code;

import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.PropertyKeyConst;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.config.listener.Listener;
import com.alibaba.nacos.api.exception.NacosException;

import java.util.Properties;
import java.util.concurrent.Executor;

public class OperConfig {
    public static void main(String[] args) throws NacosException, InterruptedException {
        String serverAddr = "localhost";
        String dataId = "hello";
        String group = "DEFAULT_GROUP";
        Properties properties = new Properties();
        properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);
        properties.put(PropertyKeyConst.USERNAME,"nacos");    //上一篇中开启了nacos的鉴权,并设置密码为nacos
        properties.put(PropertyKeyConst.PASSWORD,"nacos");
        ConfigService configService = NacosFactory.createConfigService(properties);

        String content = configService.getConfig(dataId, group, 5000);    //通过dataId和group获取对应的配置值;5000为超时时间,单位ms
        System.out.println(content);

        configService.addListener(dataId, group, new Listener() {
            @Override
            public void receiveConfigInfo(String configInfo) {
                System.out.println("receive:" + configInfo);
            }

            @Override
            public Executor getExecutor() {
                return null;
            }
        });

        boolean isPublishOk = configService.publishConfig(dataId, group, "content");    //发布配置
        System.out.println(isPublishOk);

        Thread.sleep(3000);

        content = configService.getConfig(dataId, group, 5000);
        System.out.println(content);

        boolean isRemoveOk = configService.removeConfig(dataId, group);    //删除配置
        System.out.println(isRemoveOk);
        Thread.sleep(3000);

        content = configService.getConfig(dataId, group, 5000);
        System.out.println(content);
        Thread.sleep(3000);
    }
}
复制代码

 

3、操作服务实例

复制代码
public class OperService {
    public static void main(String[] args) throws NacosException, InterruptedException {
        String serverAddr = "localhost";
        Properties properties = new Properties();
        properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);
        properties.put(PropertyKeyConst.USERNAME,"nacos");
        properties.put(PropertyKeyConst.PASSWORD,"nacos");

        NamingService naming = NamingFactory.createNamingService(properties);
        naming.registerInstance("test", "11.11.11.11", 8888, "DEFAULT");    //注册test实例,分组为DEFAULT
        Thread.sleep(2000);
        naming.registerInstance("test", "127.0.0.1", 9999, "DEFAULT");    //第二次注册test实例,同样分组为DEFAULT
        Thread.sleep(2000);
        System.out.println(naming.getAllInstances("test"));    //这边只能拿到127.0.0.1,因为第二次注册会被覆盖第一次

        Thread.sleep(2000);
        naming.subscribe("test", new EventListener() {
            @Override
            public void onEvent(Event event) {
                System.out.println(((NamingEvent)event).getServiceName());
                System.out.println(((NamingEvent)event).getInstances());
            }
        });

        naming.deregisterInstance("test", "127.0.0.1", 9999, "DEFAULT");    //注销服务实例
        Thread.sleep(2000);
        System.out.println("dereg 127.0.0.1");
        System.out.println(naming.getAllInstances("test"));
    }
}
复制代码

官方文档明确指出,同一个Nacos Client实例,仅能向一个服务注册一个实例;若同一个Nacos Client实例多次向同一个服务注册实例,后注册的实例将会覆盖先注册的实例。 如果确定需要实现多个实例同时注册,则使用批量添加服务实例。

各位使用的小伙伴需注意:根据博主的测试,getAllInstances()函数在获取实例会偶尔失败,但没有异常抛出。

 

4、批量添加服务实例

复制代码
package code;

import com.alibaba.nacos.api.PropertyKeyConst;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingFactory;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance;

import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

public class BatchOperService {
    public static void main(String[] args) throws NacosException {
        String serverAddr = "localhost";
        Properties properties = new Properties();
        properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);
        properties.put(PropertyKeyConst.USERNAME,"nacos");
        properties.put(PropertyKeyConst.PASSWORD,"nacos");

        NamingService naming = NamingFactory.createNamingService(properties);

        Instance instance1 = new Instance();
        instance1.setIp("127.0.0.1");
        instance1.setPort(8848);
        instance1.setClusterName("DEFAULT");

        Instance instance2 = new Instance();
        instance2.setIp("127.0.0.1");
        instance2.setPort(9848);
        instance2.setClusterName("DEFAULT");

        List<Instance> instances = new ArrayList<>(2);
        instances.add(instance1);
        instances.add(instance2);

        naming.batchRegisterInstance("nacos.test.service", "DEFAULT_GROUP", instances);    //批量注册实例
        System.out.println(naming.getAllInstances("nacos.test.service"));
    }
}
复制代码

 

本文到这里就结束了,对于配置与实例还有侦听配置、获取健康实例等更细致的操作,大家可以查看官网文档(点击进入)。下一篇我们将一起了解springboot整合nacos的过程:)

 

posted on   咚..咚  阅读(50)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

导航

统计

点击右上角即可分享
微信分享提示