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的过程:)
nacos(二):原生java调用配置与服务实例的更多相关文章
- 原生java调用webservice的方法,不用生成客户端代码
原生java调用webservice的方法,不用生成客户端代码 2015年10月29日 16:46:59 阅读数:1455 <span style="font-family: Aria ...
- (二)通过JAVA调用SAP接口 (增加一二级参数)
(二)通过JAVA调用SAP接口 (增加一二级参数) 一.建立sap连接 请参考我的上一篇博客 JAVA连接SAP 二.测试项目环境准备 在上一篇操作下已经建好的环境后,在上面的基础上新增类即可 三. ...
- 纯java config配置Spring MVC实例
1.首先创建一个Maven工程,项目结构如下: pom.xml添加Spring和servlet依赖,配置如下 <project xmlns="http://maven.apache.o ...
- java调用.net asmx服务
有时候,在java下开发会调用一下.net下写的服务,看网上有各种方法,但总是不成功,总结下自己测试过能调用成功的方式: 1. 原始方式http-soap public static String p ...
- Java 调用Azure认知服务Demo--Computer API
说明 本文主要介绍使用Java代码,基于HTTP请求调用Microsoft Azure的认知服务.图片来源分别介绍了使用公网的URL和上传本地图片. 依赖的jar包下载地址: key的获取需要登录到A ...
- JavaSE基础(二)--Java环境配置
Java 开发环境配置 在本章节中我们将为大家介绍如何搭建Java开发环境. Windows 上安装开发环境 Linux 上安装开发环境 安装 Eclipse 运行 Java window系统安装ja ...
- java 调用打印机 打印服务
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import javax ...
- HBase总结(十二)Java API 与HBase交互实例
HBase提供了Java Api的訪问接口,掌握这个就跟Java应用使用RDBMS时须要JDBC一样重要 import java.io.IOException; import org.apache.h ...
- (十二)Bind读取配置到C#实例
继续上一节的,接下来用Options或者Bind把json文件里的配置转成C#的实体,相互之间映射起来.首先新建一个asp.net core mvc项目OptionsBindSample Startu ...
- 用java调用.net的wcf其实还是很简单的
前些天和我们的一个邮件服务商对接,双方需要进行一些通讯,对方是java团队,而作为.net团队的我们,只能公布出去的是一个wcf的basicbinding,想不 到问题来了,对方不知道怎么去调用这 ...
随机推荐
- 时序数据库之InfluxDB
涉及用户认证: shangmayuan.com/a/1056241c80ef4dfc9cef830d.html
- Pycharm之使用git merge合并分支
当我们在某个分支上代码开发完成,代码测试没问题后需要把分支上的代码合并到 master 分支上.这样保证 master 分支的代码永远都是最新的,也是最干净的,这样才可以持续的开发自己的项目.本篇讲解 ...
- GitBook之基本使用
GitBook 简介 GitBook 官网 GitBook 文档 GitBook 准备工作 安装 Node.js GitBook 是一个基于 Node.js 的命令行工具,下载安装 Node.js,安 ...
- 这些 JavaScript 编码习惯,让你最大程度提高你的项目可维护性!
前言: 因为 JavaScript 语言是一门极其松散.极其自由的语言,这意味着我们可以随心所欲的操作它,这是他的优点,但同时也是它的缺点.在编码过程中,我们需要一种良好的规范或者习惯来保持应用程序的 ...
- Ubuntu下xrdp登陆故障解决方案
故障描述: Ubuntu使用xrdp远程桌面运行一段时间后,出现登陆错误: xrdp_mm_process_login_response: login failed 原因分析: 远程桌面没有正确关闭所 ...
- solon 集成 activemq-client (sdk)
原始状态的 activemq-client sdk 集成非常方便,也更适合定制.就是有些同学,可能对原始接口会比较陌生,会希望有个具体的示例. <dependency> <group ...
- 【MyBatis】学习笔记03:配置文件进一步解读(非常重要)
[Mybatis]学习笔记01:连接数据库,实现增删改 [Mybatis]学习笔记02:实现简单的查 目录 核心配置文件 properties 将properties文件引入到核心文件 typeAli ...
- 禅道bug增加自定义字段
禅道版本 18.9 需求 给禅道的bug模块,增加自定义字段. 目前主要增加"发现阶段"."所属环境"."出现频率" 增加bug的类型 在b ...
- IDEA自动导包(全局设置)
选择[File]-->[other settings]-->[settings for new projects](全局设置),然后搜索[Auto Import],勾选以下两个选项即可: ...
- H2数据库用户自定义函数方法及范例
H2数据库,是Java实现的内存数据库.可使用它作为嵌入式内存数据库,但就其特性还用更多值得应用在实际项目中的意义.之前的一篇Blog中已经描述过其使用方法及丰富的连接数据库方式. 官方主页:http ...