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,想不 到问题来了,对方不知道怎么去调用这 ...
随机推荐
- VUE 前端读取excel表格内容
<el-upload class="upload-demo" :action="''" :show-file-list="false" ...
- GitBook之基本使用
GitBook 简介 GitBook 官网 GitBook 文档 GitBook 准备工作 安装 Node.js GitBook 是一个基于 Node.js 的命令行工具,下载安装 Node.js,安 ...
- WinUI(WASDK)使用BotSharp框架开发多智能体桌面机器人管理助手(生图开关灯不在话下)
前言 大语言模型(Large Language Models, LLMs)近年来在各行各业中展现出了巨大的潜力和影响力.从自然语言处理到自动化客服,从内容生成到智能助手,LLMs正在改变我们与技术互动 ...
- Java基础 —— 集合(一)
集合(一) 数组和集合的区别 数组是固定长度的数据结构,而集合是动态的数据结构 数组可以包含基本数据类型和对象,集合只能包含对象 数组只能存放同一类型的数据,而集合可以蹲房不同类型的 数组可以直接访问 ...
- uni-app中使用svg
标签: svg js uni-app 前情 uni-app是我很喜欢的跨平台框架,它能开发小程序,H5,APP(安卓/iOS),对前端开发很友好,自带的IDE让开发体验也很棒,公司项目就是主推uni- ...
- RHEL8安装docker
1,安装yum-utils和dnf-utils yum install -y yum-utils dnf-utils 2,添加源 docker官方源 yum-config-manager --add- ...
- ECShop开源商城与COS互通:降低本地存储负载、提升访问体验
ECShop简介 ECShop是一款开源电子商务平台,具有简单易用.安全稳定.模块化设计等特点.它提供了完整的电子商务解决方案,包括商品管理.订单管理.支付管理.配送管理.会员管理.促销管理.数据统计 ...
- 中电金信召开“源启 AI+”人工智能应用场景与发展培训暨业务研讨会
近年来,国务院国资委把加快发展人工智能放在国资央企全局工作中统筹谋划,作为产业焕新行动和启航行动部署的主要方向,制定印发行动计划,组织召开中央企业人工智能专题推进会,开展"AI+" ...
- [双体系练习]Java基础练习题1
因为练习是word,本文我只是写了里面的部分内容,如果想查阅完整内容或者获取word以及PDF,请 关注微信公众号 乖乖狼科技 发送口令 akcd T1 静态代码块中不能? · [D ] A. 初始化 ...
- Java Function 接口用法
Java 8 中 Function 接口的介绍 Java 8 中提供了一个函数式接口 Function,这个接口表示对一个参数做一些操作然后返回操作之后的值.这个接口的有一个抽象方法 apply,这个 ...