[Nacos] Nacos Server主要类和接口 (五)

news2024/11/24 20:03:36

InstanceController: 处理器, 处理服务实例的心跳和注册等请求。

core/Service: 在Nacos客户端的一个微服务名称定义的微服务, 在Nacos服务端是以Service实例的形式出现的。类似于ServiceInfo, ServiceInfo为客户端服务, Service为服务端服务。

RecordListener: Service类实现了RecordListener接口, 这个接口为数据监听接口, 所以Service本身是一个监听器, 可以监听指定数据的变化和删除。

Record: RecordListener接口的泛型为指定了该监听器所要监听的实体类型, 这个类型是一个Record的子接口, Record是Nacos集群传输和存储的记录。

Cluster: 提供某一服务的Instance集群, 和Service为n: 1的状态, Service为1。

Instance: 注册到Nacos中的具体服务实例。

ServiceManager: Nacos中所有service的核心管理者。其中serviceMap属性为Nacos中的服务注册表。

Synchronizer: 同步器。当前Nacos主动发起同步操作。包含两个方法, 一个是当前Nacos主动发送自己的Message给指定Nacos和主动向指定的Nacos获取指定key的Message。

文章目录

      • 1.InstanceController
      • 2.core/Service
      • 3.RecordListener接口和Record接口
      • 4.Cluster类和Instance类
      • 5.ServiceManager类
      • 6.Synchronizer

1.InstanceController

处理服务实例的心跳和注册等请求。

在这里插入图片描述

在这里插入图片描述

2.core/Service

在这里插入图片描述

继承pojo/Service, 实现Record和RecordListener接口。

Service类中有一个属性protectThreshold, 为阈值。

与Eureka中的保护阈值对比:

  • 相同点: 0-1, 表示健康实例占所有实例的比例
  • 保护方式不同:
    • Eureka: 一旦健康实例数量小于阈值, 则不再从注册表中清除不健康的实例
    • Nacos: 如果健康实例数量大于阈值, 则消费者调用到的都是健康实例。一旦健康实例数量小于阈值, 则消费者会从所有实例中进行选择调用, 有可能会调用到不健康实例。这样可以保护健康的实例不会被压崩溃。
  • 范围不同:
    • Eureka: 这个阈值针对的是所有服务中的实例
    • Nacos: 这个阈值针对的是当前Service中的服务实例
    private int finalizeCount = 0;

    private String token;

    private List<String> owners = new ArrayList<>();

    private Boolean resetWeight = false;

    private Boolean enabled = true;

    private Selector selector = new NoneSelector();

    private String namespaceId;

    /**
     * IP will be deleted if it has not send beat for some time, default timeout is 30 seconds.
     */
    private long ipDeleteTimeout = 30 * 1000;

    private volatile long lastModifiedMillis = 0L;

    // 校验和,是当前Service的所有SCI信息的字符串拼接
    private volatile String checksum;

    /**
     * TODO set customized push expire time.
     */
    private long pushCacheMillis = 0L;
    // 重要集合
    // key为clusterName
    // value为Cluster实例
    private Map<String, Cluster> clusterMap = new HashMap<>();

3.RecordListener接口和Record接口

RecordListener是数据监听接口

// 泛型指定了当前监听器正在监听的数据类型
public interface RecordListener<T extends Record> {

    /**
     * Determine if the listener was registered with this key.
     * 判断当前监听器是否监听着指定key的数据
     *
     * @param key candidate key
     * @return true if the listener was registered with this key
     */
    boolean interests(String key);

    /**
     * Determine if the listener is to be removed by matching the 'key'.
     * 判断当前监听器是否已经不再监听当前指定key的数据
     *
     * @param key key to match
     * @return true if match success
     */
    boolean matchUnlistenKey(String key);

    /**
     * Action to do if data of target key has changed.
     * 若指定key的数据发生了变更,则触发该方法的执行
     *
     * @param key   target key
     * @param value data of the key
     * @throws Exception exception
     */
    void onChange(String key, T value) throws Exception;

    /**
     * Action to do if data of target key has been removed.
     * 若指定key的数据被删除,则触发该方法的执行
     *
     * @param key target key
     * @throws Exception exception
     */
    void onDelete(String key) throws Exception;
}

Record是Nacos集群传输和存储的记录。

public interface Record {

    /**
     * get the checksum of this record, usually for record comparison.
     *
     * @return checksum of record
     */
    String getChecksum();
}

4.Cluster类和Instance类

Cluster类: 提供某一服务的Instance集群, 即隶属于某一Service的Instance集群。

在这里插入图片描述

Instance: 注册到Nacos中的具体服务实例。

在这里插入图片描述

5.ServiceManager类

ServiceManager: Nacos中所有service的核心管理者。其中serviceMap属性为Nacos Server端的服务注册表。

在这里插入图片描述

serviceMap为Naocs Server端的服务注册表。serviceInfoMap为Nacos Client端的服务注册表

6.Synchronizer

service状态同步器

public interface Synchronizer {

    /**
     * Send message to server.
     * 将msg发送给指定的server
     *
     * @param serverIP target server address
     * @param msg      message to send
     */
    void send(String serverIP, Message msg);

    /**
     * Get message from server using message key.
     *
     * @param serverIP source server address
     * @param key      message key
     * @return message
     */
    Message get(String serverIP, String key);
}

send方法为将msg发送给指定的server, get方法为得到指定server的msg。

在这里插入图片描述

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

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

相关文章

2022年华数杯数学建模A题环形振荡器的优化设计解题全过程文档及程序

2022年华数杯全国大学生数学建模 A题 环形振荡器的优化设计 原题再现&#xff1a; 芯片是指内含集成电路的硅片&#xff0c;在我们日常生活中的手机、电脑、电视、家用电器等领域都会使用到&#xff0c;是高端制造业的核心基石。芯片的制造工艺非常复杂&#xff0c;要经历上千…

ChatGPT的原理与前端领域实践 | 京东云技术团队

一、ChatGPT 简介 ChatGPT的火爆 ChatGPT作为一个web应用&#xff0c;自22年12月发布&#xff0c;仅仅不到3个月的时间&#xff0c;月活用户就累积到1亿。在此之前&#xff0c;最快记录的保持者也需要9个月才达到月活1亿。 ChatGPT的反爬 https://chat.openai.com 因为各种政…

堆排序详解(Heap Sort)

本文已收录于专栏 《算法合集》 目录 一、简单释义1、算法概念2、算法目的3、算法思想4、算法性质 二、核心思想构建排序 三、图形展示宏观展示微观展示 四、算法实现实现思路代码实现客户端调用构造堆的方法元素交换的方法元素比较的方法 运行结果 五、算法描述1、问题描述2、…

如何在 Windows 10 上查找电脑型号

在Windows 10上,计算机型号在许多情况下都可以派上用场。例如,型号可以更容易地找到正确的硬件升级(如内存、存储驱动器、显示器和电源)。或者,如果你必须解决问题或联系技术支持。它还可以方便地将设备编目到库存中。 尽管制造商通常在笔记本电脑或台式机的机箱上使用贴…

Android SDK研发解决方案宝典

Android SDK研发很难整&#xff0c;非常烧脑&#xff0c;与app研发有很多不同。 遇到的问题有很多&#xff0c;各种崩溃&#xff0c;各种空指针&#xff0c;各种冲突需要解决。 所以开发前一定要提前规划好&#xff0c;做好规范。我把我这边一些问题做了记录和分享。 问题1&…

获取订单API接口系列,可接入erp系统场景

抖音和拼多多是目前国内最为火爆的社交和电商平台&#xff0c;为了让更多的开发者能够轻松利用其庞大的用户基础和活跃度&#xff0c;我们提供了相关的订单接口&#xff0c;可帮助开发者快速便捷地完成订单的创建、查询、调整等操作&#xff0c;从而更好地促进业务的发展。以下…

React项目搭建

一、项目搭建&#xff08;不采用vite方式&#xff09; 使用create-react-app生成项目 npx create-react-app pc 进入根目录 cd pc 启动项目 npm start 调整项目目录结构 /src/assets 项目资源文件&#xff0c;比如&#xff0c;图片 等/components 通用组件/pag…

分布式事务解决方案探讨

分布式事务解决方案 一、什么是事务&#xff1f;二、什么是分布式事务&#xff1f;三、分布式事务的理论模型3.1 X/Open 分布式事务模型3.1.1 X/Open事务执行流程3.1.2 XA 协议 3.2 两阶段提交协议3.3 三阶段提交协议 四、分布式事务场景解决方案4.1 TCC补偿方案4.2 基于可靠性…

密码学基本原理和发展——近代密码学

目录 1 密码机通信模型 2 Enigma密码机构造 3 Enigma密码机加解密过程 3.1 加密过程 3.2 解密过程 4 Enigma密码机的安全性 5 Enigma密码机破解 5.1 波兰雷耶夫斯基破解 5.2 图灵破解 近代密码一般指20世纪初&#xff5e;20世纪70年代期间的密码技术。20世纪初电报的出…

快速上手项目1:基于FaceNet的人脸识别项目

快速上手项目1&#xff1a;基于FaceNet的人脸识别项目 说明 ​ 本来想自己复现一下facenet的&#xff0c;但是发现facenet已经被做成了python的第三方库&#xff0c;于是自己用了用&#xff0c;发现挺简单的&#xff0c;然后又看了看源码&#xff0c;感觉模型架构实现部分很简单…

说说 HWND_TOP 和 HWND_TOPMOST 的区别

初看上去&#xff0c;HWND_TOP 和 HWND_TOPMOST 有点类似&#xff0c;但是实际上在调用 DeferWindowPos 或者 SetWindowPos时&#xff0c;它们之间的差别还挺大。 在同级窗口的维护机制中&#xff0c;有一个概念叫做 Z 序 (Z-order) 。出于此讨论的目的&#xff0c;顶级窗口也…

音容笑貌,两臻佳妙,人工智能AI换脸(deepfake)技术复刻《卡萨布兰卡》名场面(Python3.10)

影史经典《卡萨布兰卡》是大家耳熟能详的传世名作&#xff0c;那一首壮怀激烈&#xff0c;激奋昂扬的马赛曲&#xff0c;应当是通片最为激动人心的经典桥段了&#xff0c;本次我们基于faceswap和so-vits库让AI川普复刻美国演员保罗亨雷德高唱《马赛曲》的名场面。 配置人脸替换…

《斯坦福数据挖掘教程·第三版》读书笔记(英文版)Chapter 8 Advertising on the Web

来源&#xff1a;《斯坦福数据挖掘教程第三版》对应的公开英文书和PPT Chapter 8 Advertising on the Web There are several factors that must be considered in evaluating ads: The position of the ad in a list has great influence on whether or not it is clicked.…

Linkage Mapper 之 Barrier Mapper 功能解析(含实际案例分析)

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Linkage Mapper解密数字世界链接 大草原松鸡"(Greater Sage Grouse)的Lek Kernals(即HCAs),以及连接、连接障碍和恢复机会效果图: 图片

python+Django音乐播放器网站系统0tr3w

音乐网站系统的后台开发目标是以信息管理系统的管理和开发方法&#xff0c;用目前现有的新技术进行系统开发&#xff0c;提供后台管理员高度友好的界面操作以及迅捷的信息处理。而前台的开发目标是以用户的需求作为主导&#xff0c;提供对用户而言非常友好的界面操作环境以及完…

实时频谱-1.1基本概念

RF信号 RF&#xff08;射频&#xff09;是Radio Frequency的缩写&#xff0c;表示可以辐射到空间的电磁频率&#xff0c;频率范围从300KHz&#xff5e;30GHz之间。 中频 IF(intermediate frequency)&#xff0c;用来在中频衡量AM或FM调谐器抑制外来干扰的能力&#xff0c;数…

基于springboot在线外卖系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SpringBoot 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;…

You Only Look Once: 革命性目标检测算法论文解析

You Only Look Once 全论文完整翻译 You Only Look Once: Unified, Real-Time Object Detection 摘要 我们介绍了一种名为YOLO的新型目标检测方法。在目标检测的先前工作中&#xff0c;人们将分类器重新应用于执行检测任务。相反&#xff0c;我们将目标检测视为一个回归问题&a…

ChatGPT 的议论文究竟写的怎么样?111 位高中教师告诉你答案

夕小瑶科技说 原创 作者 | 小戏、Python 在 OpenAI GPT-4 发布时发布的《GPT-4 Technical Report》中&#xff0c;其中很吸引人眼球的一部分是 GPT-4 应用于教育领域的出色表现&#xff0c;通过让 GPT-4 去完成美国的 AP 课程及考试&#xff0c;来评估 GPT-4 在多个学科中的性…

WIN提权补丁提权,at,sc,psexes提权

win提权分为web和本地提权 web提权就是getshell后&#xff0c;权限是网站权限&#xff0c;要进行提权 本地提权是本地用户进行提权 本地用户的权限大于网站权限&#xff0c;所以本地提权成功概率比web提权概率大 因为我们做渗透测试&#xff0c;一般都是从网站入侵。所以大…