本文主要介绍原生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的过程:)

nacos(二):原生java调用配置与服务实例的更多相关文章

  1. 原生java调用webservice的方法,不用生成客户端代码

    原生java调用webservice的方法,不用生成客户端代码 2015年10月29日 16:46:59 阅读数:1455 <span style="font-family: Aria ...

  2. (二)通过JAVA调用SAP接口 (增加一二级参数)

    (二)通过JAVA调用SAP接口 (增加一二级参数) 一.建立sap连接 请参考我的上一篇博客 JAVA连接SAP 二.测试项目环境准备 在上一篇操作下已经建好的环境后,在上面的基础上新增类即可 三. ...

  3. 纯java config配置Spring MVC实例

    1.首先创建一个Maven工程,项目结构如下: pom.xml添加Spring和servlet依赖,配置如下 <project xmlns="http://maven.apache.o ...

  4. java调用.net asmx服务

    有时候,在java下开发会调用一下.net下写的服务,看网上有各种方法,但总是不成功,总结下自己测试过能调用成功的方式: 1. 原始方式http-soap public static String p ...

  5. Java 调用Azure认知服务Demo--Computer API

    说明 本文主要介绍使用Java代码,基于HTTP请求调用Microsoft Azure的认知服务.图片来源分别介绍了使用公网的URL和上传本地图片. 依赖的jar包下载地址: key的获取需要登录到A ...

  6. JavaSE基础(二)--Java环境配置

    Java 开发环境配置 在本章节中我们将为大家介绍如何搭建Java开发环境. Windows 上安装开发环境 Linux 上安装开发环境 安装 Eclipse 运行 Java window系统安装ja ...

  7. java 调用打印机 打印服务

    import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import javax ...

  8. HBase总结(十二)Java API 与HBase交互实例

    HBase提供了Java Api的訪问接口,掌握这个就跟Java应用使用RDBMS时须要JDBC一样重要 import java.io.IOException; import org.apache.h ...

  9. (十二)Bind读取配置到C#实例

    继续上一节的,接下来用Options或者Bind把json文件里的配置转成C#的实体,相互之间映射起来.首先新建一个asp.net core mvc项目OptionsBindSample Startu ...

  10. 用java调用.net的wcf其实还是很简单的

      前些天和我们的一个邮件服务商对接,双方需要进行一些通讯,对方是java团队,而作为.net团队的我们,只能公布出去的是一个wcf的basicbinding,想不 到问题来了,对方不知道怎么去调用这 ...

随机推荐

  1. 重新使用Java的七个理由

    译者注:此文系作者于2011年7月11发表于OnJava O'Reily正在庆祝Java7的发布,以及7月25日到27日即将在波兰开展的 OSCON Java 大会. Java宣告回归了,同胞们.当然 ...

  2. 创建一个具有商业品质的 Eclipse IDE

    创建具有商业品质且可插入 Eclipse 的专业 IDE Prashant Deva (pdeva@placidsystems.com), 创始人, Placid Systems 简介:  " ...

  3. Clickhouse之数据删除方式

    什么是TTL? TTL的意思是Time To Live表示数据的存活时间.由于数据的价值会根据保存的时间成反比,出于存储成本的考虑通常只会保留近一年的数据.而在MergeTree (合并树)引擎中,可 ...

  4. Redis循环慢接口优化

    原慢接口 List<String> keys = new ArrayList<>(Arrays.asList("1", "2", &qu ...

  5. .NET 中的中间件(Middleware)

    ASP.NET Core 中间件 什么是中间件(Middleware)? 中间件是组装到应用程序管道中以处理请求和响应的软件. 每个组件: 选择是否将请求传递给管道中的下一个组件. 可以在调用管道中的 ...

  6. The 2nd GUAT Collegiate Programming Contest (Round 1)

    第二届 GUAT大学生程序设计大赛 第一场 题解(A-M) 前言 比赛的内容主要包括计算机科学的常用算法,基本的计算理论,(如:离散数学,具体数学,组合数学基础),数据结构基础,程序设计语言(规定是C ...

  7. Mplus数据分析:分段潜增长模型,看jama如何玩转纵向数据的轨迹

    今天给大家介绍分段潜增长模型的原理和做法,之前我有给大家写增长混合和潜增长,它们的主要的局限在于轨迹都是连续的不能分段,在于对phasic的现象把握其实还是不够的,比如儿童认知的发展,按照理论,它是可 ...

  8. 使用 Docker Compose 安装 MongoDB

    最近学习 Docker ,试着在 Docker 里安装 MongoDB,按照镜像 mongo 文档一顿操作猛如虎. 快速开始 写个 docker-compose.yml 文件: version: '3 ...

  9. com.sun.xml.internal.messaging.saaj.util 不存在

    maven 编译时报错:程序包com.sun.xml.internal.messaging.saaj.util不存在需要添加 <compilerArguments> <verbose ...

  10. 如何调整Linux系统为正确时区

    如果你的 Linux 系统时区配置不正确,必需要手动调整到正确的当地时区.NTP 对时间的同步处理只计算当地时间与 UTC 时间的偏移量,因此配置一个 NTP 对时间进行同步并不能解决时区不正确的问题 ...