Nacos的Java SDK

news2025/1/22 21:37:40

配置管理

在界面上添加配置

在这里插入图片描述
在这里插入图片描述
我们在界面上新建了一个json类型的配置

使用SDK来获取配置

public String getConfig(String dataId, String group, long timeoutMs) throws NacosException
名称类型描述
dataIdstring配置 ID,采用类似 package.class(如com.taobao.tc.refund.log.level)的命名规则保证全局唯一性,class 部分建议是配置的业务含义。全部字符小写。只允许英文字符和 4 种特殊字符(“.”、“:”、“-”、“_”),不超过 256 字节。
groupstring配置分组,建议填写产品名:模块名(Nacos:Test)保证唯一性,只允许英文字符和4种特殊字符(“.”、“:”、“-”、“_”),不超过128字节。
timeoutlong读取配置超时时间,单位 ms,推荐值 3000
        // Nacos的地址(ip:port),端口是8848也可以不写
        String serverAddr = "localhost:8848";
        ConfigService configService = NacosFactory.createConfigService(serverAddr);
        System.out.println(configService);
        String dataId = "com.yyoo.nacos.sdk.CofingServiceTest";
        String group = "Nacos:Test";
        String content = configService.getConfig(dataId,group,3000);
        System.out.println(content);

运行结果

{"conf1":"test"}

添加配置监听

添加配置监听之后,Nacos 会推送配置变更

    @Test
    public void testConfig() throws NacosException, InterruptedException {
        // Nacos的地址(ip:port),端口是8848也可以不写
        String serverAddr = "localhost:8848";
        ConfigService configService = NacosFactory.createConfigService(serverAddr);
        System.out.println(configService);
        String dataId = "com.yyoo.nacos.sdk.CofingServiceTest";
        String group = "Nacos:Test";
        String content = configService.getConfig(dataId,group,1000);
        System.out.println(content);

        configService.addListener(dataId, group, new Listener() {
            @Override
            public Executor getExecutor() {
                return null;
            }

            @Override
            public void receiveConfigInfo(String configInfo) {
                System.out.println("listener:"+configInfo);
            }
        });


        // 休眠线程60秒,因为订阅配置是守护线程,主线程退出守护线程就会退出(只是测试用,正式环境请勿使用)
        Thread.sleep(60000);

    }

60秒内,进入Nacos的系统界面。修改对应的配置:
在这里插入图片描述
修改发布后,我们的监听器的receiveConfigInfo方法即会执行

listener:{
    "conf1":"test",
    "conf2":"test3"
}

Listener接口的继承关系

在这里插入图片描述

AbstractConfigChangeListener如果我们要监听配置的变化,我们可以实现改监听来实现。其receiveConfigChange方法的ConfigChangeEvent对象可以获取ConfigChangeItem对象的列表,ConfigChangeItem对象属性就很丰富了。有需求的可以试试。这里不做详细讲解了。

PropertiesListener直接处理了Properties类型的配置,可以直接获取为Properties对象,我们可以照着此实现,来实现Json格式或者其他格式的监听。

删除监听

删除监听后Nacos不在推送配置信息

public void removeListener(String dataId, String group, Listener listener)
// 直接传入上面示例的监听对象即可
configService.removeListener(dataId, group, 上面的listener对象);

发布配置

public boolean publishConfig(String dataId, String group, String content) throws NacosException;

@Since 1.4.1
public boolean publishConfig(String dataId, String group, String content, String type) throws NacosException;

注:创建和修改配置时使用的同一个发布接口,当配置不存在时会创建配置,当配置已存在时会更新配置。

名称类型描述
contentstring配置内容,不超过 100K 字节。
typestring@Since 1.4.1. 配置类型,见 com.alibaba.nacos.api.config.ConfigType,默认为TEXT

服务管理

注册实例

    /**
     * register a instance to service.
     *
     * @param serviceName name of service
     * @param ip          instance ip
     * @param port        instance port
     * @throws NacosException nacos exception
     */
	void registerInstance(String serviceName, String ip, int port) throws NacosException;
    
    /**
     * register a instance to service.
     *
     * @param serviceName name of service
     * @param groupName   group of service
     * @param ip          instance ip
     * @param port        instance port
     * @throws NacosException nacos exception
     */
    void registerInstance(String serviceName, String groupName, String ip, int port) throws NacosException;
    
    /**
     * register a instance to service with specified cluster name.
     *
     * @param serviceName name of service
     * @param ip          instance ip
     * @param port        instance port
     * @param clusterName instance cluster name
     * @throws NacosException nacos exception
     */
    void registerInstance(String serviceName, String ip, int port, String clusterName) throws NacosException;
    
    /**
     * register a instance to service with specified cluster name.
     *
     * @param serviceName name of service
     * @param groupName   group of service
     * @param ip          instance ip
     * @param port        instance port
     * @param clusterName instance cluster name
     * @throws NacosException nacos exception
     */
    void registerInstance(String serviceName, String groupName, String ip, int port, String clusterName)
            throws NacosException;
    
    /**
     * register a instance to service with specified instance properties.
     *
     * @param serviceName name of service
     * @param instance    instance to register
     * @throws NacosException nacos exception
     */
    void registerInstance(String serviceName, Instance instance) throws NacosException;
    
    /**
     * register a instance to service with specified instance properties.
     *
     * @param serviceName name of service
     * @param groupName   group of service
     * @param instance    instance to register
     * @throws NacosException nacos exception
     */
    void registerInstance(String serviceName, String groupName, Instance instance) throws NacosException;

示例1:

        // Nacos的地址(ip:port),端口是8848也可以不写
        String serverAddr = "localhost:8848";
        NamingService namingService = NamingFactory.createNamingService(serverAddr);
        namingService.registerInstance("nacos.test.t1","172.168.1.1",8888,"cluster1");

实例2:

        // Nacos的地址(ip:port),端口是8848也可以不写
        String serverAddr = "localhost:8848";
        NamingService namingService = NamingFactory.createNamingService(serverAddr);

        Instance instance = new Instance();
        instance.setIp("172.168.1.1");
        instance.setPort(8888);
        instance.setHealthy(false);
        instance.setWeight(2.0);
        Map<String, String> instanceMeta = new HashMap<>();
        instanceMeta.put("site", "et2");
        instance.setMetadata(instanceMeta);
        instance.setClusterName("cluster1");
        namingService.registerInstance("nacos.test.t1",instance);

注销实例

    
    /**
     * deregister instance from a service.
     *
     * @param serviceName name of service
     * @param ip          instance ip
     * @param port        instance port
     * @throws NacosException nacos exception
     */
    void deregisterInstance(String serviceName, String ip, int port) throws NacosException;
    
    /**
     * deregister instance from a service.
     *
     * @param serviceName name of service
     * @param groupName   group of service
     * @param ip          instance ip
     * @param port        instance port
     * @throws NacosException nacos exception
     */
    void deregisterInstance(String serviceName, String groupName, String ip, int port) throws NacosException;
    
    /**
     * deregister instance with specified cluster name from a service.
     *
     * @param serviceName name of service
     * @param ip          instance ip
     * @param port        instance port
     * @param clusterName instance cluster name
     * @throws NacosException nacos exception
     */
    void deregisterInstance(String serviceName, String ip, int port, String clusterName) throws NacosException;
    
    /**
     * deregister instance with specified cluster name from a service.
     *
     * @param serviceName name of service
     * @param groupName   group of service
     * @param ip          instance ip
     * @param port        instance port
     * @param clusterName instance cluster name
     * @throws NacosException nacos exception
     */
    void deregisterInstance(String serviceName, String groupName, String ip, int port, String clusterName)
            throws NacosException;
    
    /**
     * deregister instance with full instance information and default groupName.
     *
     * @param serviceName name of service
     * @param instance    instance
     * @throws NacosException nacos exception
     */
    void deregisterInstance(String serviceName, Instance instance) throws NacosException;
    
    /**
     * deregister instance with full instance information.
     *
     * @param serviceName name of service
     * @param groupName   group of service
     * @param instance    instance information
     * @throws NacosException nacos exception
     */
    void deregisterInstance(String serviceName, String groupName, Instance instance) throws NacosException;

示例:

namingService.deregisterInstance("nacos.test.t1", "172.168.1.1", 8888, "cluster1");

获取全部实例

  
    /**
     * get all instances of a service.
     *
     * @param serviceName name of service
     * @return A list of instance
     * @throws NacosException nacos exception
     */
    List<Instance> getAllInstances(String serviceName) throws NacosException;
    
    /**
     * get all instances of a service.
     *
     * @param serviceName name of service
     * @param groupName   group of service
     * @return A list of instance
     * @throws NacosException nacos exception
     */
    List<Instance> getAllInstances(String serviceName, String groupName) throws NacosException;
    
    /**
     * Get all instances of a service.
     *
     * @param serviceName name of service
     * @param subscribe   if subscribe the service
     * @return A list of instance
     * @throws NacosException nacos exception
     */
    List<Instance> getAllInstances(String serviceName, boolean subscribe) throws NacosException;
    
    /**
     * Get all instances of a service.
     *
     * @param serviceName name of service
     * @param groupName   group of service
     * @param subscribe   if subscribe the service
     * @return A list of instance
     * @throws NacosException nacos exception
     */
    List<Instance> getAllInstances(String serviceName, String groupName, boolean subscribe) throws NacosException;
    
    /**
     * Get all instances within specified clusters of a service.
     *
     * @param serviceName name of service
     * @param clusters    list of cluster
     * @return A list of qualified instance
     * @throws NacosException nacos exception
     */
    List<Instance> getAllInstances(String serviceName, List<String> clusters) throws NacosException;
    
    /**
     * Get all instances within specified clusters of a service.
     *
     * @param serviceName name of service
     * @param groupName   group of service
     * @param clusters    list of cluster
     * @return A list of qualified instance
     * @throws NacosException nacos exception
     */
    List<Instance> getAllInstances(String serviceName, String groupName, List<String> clusters) throws NacosException;
    
    /**
     * Get all instances within specified clusters of a service.
     *
     * @param serviceName name of service
     * @param clusters    list of cluster
     * @param subscribe   if subscribe the service
     * @return A list of qualified instance
     * @throws NacosException nacos exception
     */
    List<Instance> getAllInstances(String serviceName, List<String> clusters, boolean subscribe) throws NacosException;
    
    /**
     * Get all instances within specified clusters of a service.
     *
     * @param serviceName name of service
     * @param groupName   group of service
     * @param clusters    list of cluster
     * @param subscribe   if subscribe the service
     * @return A list of qualified instance
     * @throws NacosException nacos exception
     */
    List<Instance> getAllInstances(String serviceName, String groupName, List<String> clusters, boolean subscribe)
            throws NacosException;

获取健康或不健康实例列表

List<Instance> selectInstances(String serviceName, boolean healthy) throws NacosException;

List<Instance> selectInstances(String serviceName, List<String> clusters, boolean healthy) throws NacosException;

获取一个健康实例

Instance selectOneHealthyInstance(String serviceName) throws NacosException;

Instance selectOneHealthyInstance(String serviceName, List<String> clusters) throws NacosException;

监听服务

监听服务下的实例列表变化

void subscribe(String serviceName, EventListener listener) throws NacosException;

void subscribe(String serviceName, List<String> clusters, EventListener listener) throws NacosException;

取消监听服务

void unsubscribe(String serviceName, EventListener listener) throws NacosException;

void unsubscribe(String serviceName, List<String> clusters, EventListener listener) throws NacosException;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/105495.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

10分钟vue初步入门

基础原理 使用vue开发&#xff0c;对于新手需要了解的两个关键点是 MVVM MVC模式变化而来&#xff0c;相对于MVC强调控制-模型-视图的责任分离之外&#xff0c;最大的特点就是引入ViewModel&#xff0c;支持双向绑定 比如你改变一个输入框 Input 标签的值&#xff0c;会自动…

仓库管理系统GreaterWMS的安装

本文是应网友 ubuntu 和 Nathan 要求写的&#xff1b;因为看起来 Nathan 比较着急&#xff0c;就突击了一下&#xff0c;因为时间仓促&#xff0c;错误在所难免&#xff0c;敬请谅解~ 什么是 GreaterWMS &#xff1f; GreaterWMS是完全开源的仓库管理系统。该库存管理系统是目前…

心脏病_冠心病智能预测模型(人工智能,机器学习,用于论文作业_专利_企业建模__项目申报_科研报告,收藏)

作者Toby&#xff0c;来自心脏病_冠心病智能预测模型 ​ 心脏病&#xff08;heart disease&#xff09;是心脏疾病的总称&#xff0c;包括风湿性心脏病、先天性心脏病、高血压性心脏病、冠心病、心肌炎等各种心脏病。 人体“发动机” 心脏是一个强壮的、不知疲倦、努力工作的…

更适合运动的耳机,设计时尚轻巧好用,南卡Runner CC3上手

很多喜欢健身的朋友&#xff0c;在锻炼的时候都会戴上一副耳机&#xff0c;这样可以在音乐的节奏中享受运动的乐趣。在运动耳机当中&#xff0c;骨传导耳机是这两年很受欢迎的一种类型&#xff0c;相比于更常见的真无线耳机&#xff0c;骨传导耳机因为特殊的发声方式&#xff0…

品优购项目-头部底端和整个页面底端制作

品优购项目(二) 3). nav 制作 nav 盒子通栏有高度 而且有个下边框1号盒子 左侧浮动 dorpdown 下拉导航 里面包含 dt dd2号盒子右侧浮动 navitems 导航栏组 11. logo 优化 logo 里面 首先放一个 h1 标签 &#xff0c;目的是为了提权&#xff0c;告诉搜索引擎&#xff0c;这个地方…

微信小程序开发—入门到跑路(四)

1、学习目标 今天所学习的所有知识点都是围绕自定义组件 &#xff0c; 具体参见&#xff1a;【指南>自定义组件】 知识点名称知识点内容难度系数要求程度组件创建和引用创建自定义组件、局部引用、全局引用、全局和局部比较、组件和页面的区别3星掌握组件样式样式的隔离特…

如何使用Moonbeam Safe质押GLMR/MOVR

通过Moonbeam Safe能够轻松实现与已验证的合约进行合约交互。Moonbeam的StakingInterface.sol&#xff08;虽然准确来说被描述为预编译而非合约&#xff09;已经在Moonscan上通过验证&#xff0c;能够使用Moonbeam Safe&#xff08;Gnosis的一个用户友好型分叉&#xff09;实现…

使用 vcpkg 安装 mathgl,但使用 find_package 命令却找不到的问题

问题描述 使用 vscode cmake vcpkg 进行c开发, 很 Nice. 但是在使用MathGL库的时候却出现了问题, 如果你的CMakeLists.txt 是这样写的: cmake_minimum_required(VERSION 3.0.0) project(mgl_demo VERSION 0.1.0)find_package(MathGL CONFIG REQUIRED)add_executable(mgl_de…

贝叶斯基础

概要 贝叶斯定理描述的是条件概率&#xff0c;不同于全局概率&#xff0c;它表示当某一个事件&#xff08;B&#xff09;发生时&#xff0c;另一个事件&#xff08;A&#xff09;发生的概率。从机器学习的角度&#xff0c;从全局无法知道事件&#xff08;A&#xff09;发生的概…

IT行业岗位分析系统设计与实现(Spark+Hadoop)

目 录 摘要 I ABSTRACT II 1 引言 1 1.1 研究背景 1 1.2 研究意义 1 1.3 研究内容与组织结构 1 2 相关理论与技术介绍 3 2.1 HDFS简介 3 2.2 Spark简介 4 2.3 MongoDB数据库简介 6 2.4 爬虫技术简介 7 2.5 Echarts简介 8 2.6 Pyqt5简介 8 2.7 本章小结 8 3 系统需求分析 9 3.1…

BertNet、RoBertaNe

又带来了可扩展、可解释&#xff0c;从预训练语言模型中高效提取知识图谱的新框架 来自加州大学圣迭戈分校&#xff08;UCSD&#xff09;、卡内基梅隆大学&#xff08;CMU&#xff09;等机构的研究者提出了一种自动知识抽取框架&#xff0c;可以从 BERT 或 RoBerta 等预训练语…

fpga实操训练(利用fpga实现pwm)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 pwm&#xff0c;其实就是方波。它的本质就是通过方波中占空比的调节&#xff0c;实现对外部设备的控制。简单如台灯&#xff0c;复杂如电机都是这么…

【Java系列】小小练习——带你回顾Java基础语法

返回主篇章         &#x1f447; 【Java】才疏学浅小石Java问道之路 Java小练习1. 练习一1.1 题目1.2 题解(附解析)2. 练习二2.1 题目2.2 题解(附解析)3. 练习三3.1 题目3.2 题解(附解析)小结1. 练习一 1.1 题目 定义三个变量&#xff0c;分别为人物性别、年龄、身高…

Python-实战:基于白鲸优化BWO算法的VMD超参数优化

目录 1、白鲸优化算法 2、BWO优化VMD参数 3、实战 3.1 原始时间序列数据 3.2 VMD分解--直接设置参数 3.3 采用BWO优化VMD 4、代码 在博客的基础上&#xff0c;本文利用白鲸优化算法对VMD的参数进行优化&#xff0c;采用python实现。 1、白鲸优化算法 白鲸优化算法([Beluga…

【Python】自动备份脚本

文章目录一、前言二、代码一、前言 之前因为疫情常常不知道会不会被封在家里&#xff0c;又不想把电脑带过来带过去&#xff0c;就做了这个自动备份的脚本。 功能如下&#xff1a; 自动从指定根目录里将找到的所有指定后缀名的文件备份到一个备份文件夹里&#xff1b;将备份…

ImageAdaptive-YOLO

又发现了一个yolo~~ 恶劣天气下的目标检测 也叫IA-YOLO 源代码&#xff1a;https://github.com/wenyyu/ImageAdaptive-YOLO 尽管基于深度学习的目标检测方法在传统数据集上取得了可喜的结果&#xff0c;但从恶劣天气条件下捕获的低质量图像中定位目标仍然具有挑战性。现有方…

三顾茅庐,七面阿里,25k*16offer,还原我的大厂面经

写在片头&#xff1a;声明&#xff0c;勿杠 首先简单说一下&#xff0c;这三次面试阿里并不是一次性去面的&#xff0c;实际上第一次面试时候还在大四&#xff0c;找的实习岗&#xff0c;不太清楚是什么部门&#xff0c;别问我为什么还记得面试题&#xff0c;有记录和复盘的习…

C++Easyx世界杯版跑酷小游戏

&#x1f411;本文作者&#xff1a;克隆窝&#x1f411; &#x1f3ae;&#x1f50a;本文代码适合编译环境&#xff1a;DEV-C&#x1f4bb; ✨&#x1f9e8;温馨提示&#xff1a;此文乃作者心血&#xff0c;如要转载请标注版权&#xff0c;否则视为抄袭&#xff01;&#x1f38…

计算机毕设Python+Vue羊肉溯源系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Python图形用户界面(GUI)之PyQt6入门及转换视频格式示例

上篇文章中学习的wxPython用户界面&#xff0c;没有拖拽组件等操作&#xff0c;不是很方便&#xff0c;下面来看个更加强大的GUI>PyQt系列&#xff0c;拥有拖拽组件界面&#xff0c;这样设计界面就显得非常简单与方便了。Qt库由 Riverbank Computing开发&#xff0c;是最强大…