java集成Nacos服务
1,添加依赖:首先,在你的 Java 项目中,你需要添加 Nacos 客户端 SDK 的依赖
<dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>2.1.1</version></dependency>
2,编写注册代码:接下来,你可以编写 Java 代码来将服务注册到 Nacos 服务注册中心并连接到指定的命名空间
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;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 com.alibaba.nacos.api.naming.NamingFactory;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance;/*** Java集成Nacos服务 * Nacos版本 2.1.1* @author YannanGao 20231214*/
public class NacosTest {static ExecutorService executorService = Executors.newFixedThreadPool(1);public static void main(String[] args) throws NacosException, InterruptedException {String clusterName = "DEFAULT";// 指定 clusterNameString serverAddr= "127.0.0.1:" + 8848;// Nacos 服务ip地址String localIpAddress = getLocalIpAddress(true);// 本机内网ipString namesPace="gs-test";//命名空间// 创建连接 Nacos 服务注册中心的配置Properties properties = new Properties();properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);// 指定ip 端口properties.put(PropertyKeyConst.NAMESPACE, namesPace); // 指定命名空间properties.put(PropertyKeyConst.NAMING_LOAD_CACHE_AT_START, "false"); // 用于指定是否在启动时加载缓存。当设置为 true 时,Nacos// 客户端在启动时会从 Nacos// 服务端加载服务实例信息到本地缓存中,以提高后续的查询性能。properties.put(PropertyKeyConst.CLUSTER_NAME, clusterName); // 指定 clusterName// 创建 Nacos 服务注册中心的连接NamingService namingService = NamingFactory.createNamingService(properties);String serviceName = "test-service-java";// 服务名称int httpPort = 80;// 当前项目http端口// 创建服务实例Instance instance = new Instance();instance.setIp(localIpAddress);instance.setPort(httpPort);instance.setServiceName(serviceName);Map<String, String> map = new HashMap<String, String>();map.put("realIp", localIpAddress);map.put("info", "自定义内容");instance.setMetadata(map);// 元数据// 注册服务实例到 Nacos 服务注册中心namingService.registerInstance(serviceName, instance);System.err.println("Nacos 注册成功!");//获取指定服务名的实例列表getAllInstances("hall", namingService);// 创建并注册关闭钩子Runtime.getRuntime().addShutdownHook(new Thread(() -> {System.err.println("监听到程序关闭了");// 关闭Nacos连接try {executorService.shutdown();namingService.deregisterInstance(serviceName, localIpAddress, httpPort, clusterName);System.err.println("Nacos 注销成功!");} catch (NacosException e) {// TODO Auto-generated catch blocke.printStackTrace();}}));//获取指定分组的配置文件String dataId = "app_common";String group = "init";getConfig(serverAddr, dataId, group,clusterName,namesPace);//监听定分组的配置文件变更executorService.execute(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubtry {receiveConfigInfo(serverAddr, dataId, group,clusterName,namesPace);} catch (NacosException e) {// TODO Auto-generated catch blocke.printStackTrace();}}});while (true) {Thread.sleep(1000 * 10);System.err.println("...");}}/*** 获取指定服务名的实例列表* @param serviceName* @param namingService*/public static void getAllInstances(String serviceName,NamingService namingService) {try {// 获取指定服务名的实例列表List<Instance> instances = namingService.getAllInstances(serviceName);// 打印实例的 IP 和端口信息for (Instance instance : instances) {System.out.println(serviceName+" Instance: " + instance.getIp() + ":" + instance.getPort());}} catch (Exception e) {e.printStackTrace();// TODO: handle exception}}/*** 获取配置文件* @param serverAddr* @param dataId* @param group* @param clusterName* @param namesPace*/public static void getConfig(String serverAddr, String dataId, String group,String clusterName,String namesPace) {try {Properties properties = new Properties();properties.put("serverAddr", serverAddr);properties.put(PropertyKeyConst.NAMESPACE, namesPace); // 指定命名空间properties.put(PropertyKeyConst.CLUSTER_NAME, clusterName); // 指定 clusterNameConfigService configService = NacosFactory.createConfigService(properties);String config = configService.getConfig(dataId, group, 5000); // 获取配置文件,5000 表示超时时间,单位为毫秒System.err.println("getConfig Retrieved config: " + config);} catch (Exception e) {e.printStackTrace();// TODO: handle exception}}/*** 监听配置文件更新* @param serverAddr* @param dataId* @param group* @param clusterName* @param namesPace* @throws NacosException*/public static void receiveConfigInfo(String serverAddr, String dataId, String group,String clusterName,String namesPace) throws NacosException {try {Properties properties = new Properties();properties.put("serverAddr", serverAddr);properties.put(PropertyKeyConst.NAMESPACE, namesPace); // 指定命名空间properties.put(PropertyKeyConst.CLUSTER_NAME, clusterName); // 指定 clusterNameConfigService configService = NacosFactory.createConfigService(properties);configService.addListener(dataId, group, new Listener() {@Overridepublic Executor getExecutor() {return null;}@Overridepublic void receiveConfigInfo(String configInfo) {// 处理配置更新的逻辑System.err.println("receiveConfigInfo Received updated config: " + configInfo);}});} catch (Exception e) {e.printStackTrace();// TODO: handle exception}}/*** 获取本机IP**/public static String getLocalIpAddress(boolean local) {String localip = null;// 本地IP,如果没有配置外网IP则返回它String netip = null;// 外网IPEnumeration<NetworkInterface> netInterfaces = null;try {netInterfaces = NetworkInterface.getNetworkInterfaces();} catch (SocketException e) {return null;}InetAddress ip = null;while (netInterfaces.hasMoreElements()) {NetworkInterface ni = netInterfaces.nextElement();Enumeration<InetAddress> address = ni.getInetAddresses();while (address.hasMoreElements()) {ip = address.nextElement();if (!ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) {// 外网IPif (netip == null) {netip = ip.getHostAddress();}} else if (ip.isSiteLocalAddress() && !ip.isLoopbackAddress()&& ip.getHostAddress().indexOf(":") == -1) {// 内网IPif (localip == null) {localip = ip.getHostAddress();}}}}if (local) {return localip;}return netip;}}
3,运行起来就可以Nacos后台看见注册的服务了
相关文章:
java集成Nacos服务
1,添加依赖:首先,在你的 Java 项目中,你需要添加 Nacos 客户端 SDK 的依赖 <dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>2.1.1</ve…...
开源IPad Pro应用IDE:使用SSH远程连接服务器进行云端编程开发
🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,…...
ubuntu 自动安装 MKL Intel fortran 编译器 ifort 及完美平替
首先据不完全观察,gfortran 与 openblas是 intel fortran 编译器 ifotr和mkl的非常优秀的平替,openblas连函数名都跟mkl一样,加了一个下划线。 1, 概况 https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-too…...
elementui select中添加新增标签
<el-select v-model"ruleForm.eventType" :placeholder"请选择事件类型,可手动添加" ref"template" clearable visible-change"(v) > visibleChange(v, template)"><el-option v-for"item in eventTypeOp…...
图像截屏公式识别——LaTeX-OCR安装与使用
一、简介 LaTeX-OCR 是一个开源的光学字符识别(OCR)软件,专为 LaTeX 文档提供支持。其主要目的是帮助用户将扫描的文档转换为 LaTeX 编辑器可以使用的可编辑文本,从而方便进行修改、编辑和排版。LaTeX广泛用于科技、数学、工程等…...
LabVIEW与Tektronix示波器实现电源测试自动化
LabVIEW与Tektronix示波器实现电源测试自动化 在现代电子测试与测量领域,自动化测试系统的构建是提高效率和精确度的关键。本案例介绍了如何利用LabVIEW软件结合Tektronix MDO MSO DPO2000/3000/4000系列示波器,开发一个自动化测试项目。该项目旨在自动…...
青少年CTF-Crypto(Morse code/ASCII和凯撒)
FLAG:你这一生到底想干嘛 专研方向: Web安全 ,Md5碰撞 每日emo:不要因为别人都交卷了,就乱选答案 文章目录 1.Morse code2、ASCII和凯撒的约定 1.Morse code 题目提示摩尔斯电码,这个是给的附件 直接用摩尔斯解密&am…...
Vue3-16-【v-model】 表单数据绑定
作用描述 v-model 指令,实现了 表单输入组件的值 与 js 中的变量的值的绑定关系。 当我们在页面上执行输入动作时,js中变量的值也会同步发生变化。表单不仅仅局限于输入框,其他的如 : 单选按钮,复选框,下拉…...
【Flink on k8s】- 12 - Flink kubernetes operator 的高级特性
目录 1、自动伸缩 1.1 工作原理 1.2 Job 要求和限制 1.2.1 要求 1.2.2 限制...
量子芯片技术:未来的计算革命
量子芯片技术:未来的计算革命 一、引言 随着科技的不断发展,人类正在进入一个全新的技术时代,即量子时代。量子芯片技术作为这个时代的重要代表,正逐渐改变我们对计算和信息处理的理解。本文将深入探讨量子芯片技术的基本原理、…...
vaptcha-手势验证码
很外向,上班总想坐老板的位置。 网址:https://www.vaptcha.com/#demo 第一次接触是在大学刚毕业的时候,搞了一半就没搞了。时隔1年多,回来看看。 难点,图片还原,轨迹,canvas校验等。 轨迹的…...
【一种用opencv实现高斯曲线拟合的方法】
背景: 项目中需要实现数据的高斯拟合,进而提取数据中标准差,手头只有opencv库,经过资料查找验证,总结该方法。 基础知识: 1、opencv中solve可以实现对矩阵参数的求解; 2、线的拟合就是对多项…...
find_package 和 find_library的区别
背景 经常看CMakeLists.txt中有find_package和find_library,有时候没留意以为都一样,其实二者差距比较大,下面简单记录一下。 find_package find_package(NAME), 这段代码的本质就是在找一个NAME.cmake这个文件,一般在安装库的…...
socket是如何进行通信的
Socket通信的原理大致分为以下几个步骤: 服务器端建立Socket,开始侦听整个网络中的连接请求。当检测到来自客户端的连接请求时,向客户端发送收到连接请求的信息,并建立与客户端之间的连接。当完成通信后,服务器关闭与…...
STM32-固件打包部署
STM32-固件打包部署 Fang XS.1452512966qq.com STM32固件输出 工程上使用Keil开发STM32软件;在调试过程中,可直接编译下载;例如bootloader和APP,在调试时,可以直接下载2次;但是工程上,需要大…...
微信机器人如何使用?好用吗?好奇
随着微信的使用范围越来越大,所以人一多,管理起来就会遇到很多繁琐的情况需要仍去操作。 比如需要手动一个个通过好友验证,发消息,相同问题一遍遍的回答,消息还容易看漏,回复不过来...... 想着如果有什么可…...
ARMV8 - A64 - 函数调用,内存栈操作
说明 看了下ARM平台上C语言函数调用的反汇编代码,理清楚了其中的内存栈汇编操作,特整理下。本文环境基于:ARMv8-a架构A53核soc,aarch64状态。 预先了解的知识点 内存栈 栈和栈帧的基本概念重点:出栈入栈的单位不是…...
MyBatis 四大核心组件之 ResultSetHandler 源码解析
🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…...
docker-compose 单机容器编排
docker-compose 单机容器编排 Dockerfile:先配置好的文件,然后bulid,镜像容器。 docker-compose 既可以基于dockerfile,也可以基于镜像,一键式拉起镜像和容器。 docker-compose 核心就是yml文件,可以定义…...
springboot项目使用Layui作为前端UI的一系列前后端交互的解决方法
背景: 因为比较喜欢Layui,因为多个项目都是从零开始就使用的layui开发的,并且开发过程中借鉴了很多其他项目(如Ruoyi、Pear Admin),因此最终选用大部分Pear Admin的项目中使用的一系列解决方案,…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
