当前位置: 首页 > news >正文

001-Nacos 服务注册

目录

  • Nacos
    • 介绍
    • 注册中心架构
    • 面临问题
    • 源码分析
      • 实例注册-接口
      • 实例注册-入口
      • 实例注册-创建一个(Nacos)Service
      • 实例注册-注册(Nacos)Service

Nacos

介绍

Dynamic Naming and Configuration Service
动态的命名和配置服务

反正可以实现注册中心的功能

注册中心架构

服务提供者
服务消费者
注册中心

  1. 提供者告知注册中心可以提供服务的地址
  2. 注册中心注册服务
  3. 消费者拉取服务列表

面临问题

  1. 提供者宕机怎么处理
    Nacos client 中会启动一个线程上报心跳,5s一次
    默认配置下 15s 没有上报心跳则 instance 健康状态切换为 false
    30s 没有上报则直接删除 instance

源码分析

实例注册-接口

Nacos 使用 Java 代码编写其实就是用的 Spring boot
查看官网 Open-API 注册实例接口是:@PostMapping /nacos/v1/ns/instance
在这里插入图片描述

实例注册-入口

com.alibaba.nacos.naming.controllers.InstanceController#register//读取 request 传输的参数,组装成 instance
final Instance instance = parseInstance(request);
serviceManager.registerInstance(namespaceId, serviceName, instance);
return "ok"; 
registerInstance(namespaceId, serviceName, instance)://如果缓存中不存在 则创建空的Service
createEmptyService(namespaceId, serviceName, instance.isEphemeral());
//从缓存中读取
Service service = getService(namespaceId, serviceName);
//注册实例
addInstance(namespaceId, serviceName, instance.isEphemeral(), instance);

实例注册-创建一个(Nacos)Service

createEmptyService(namespaceId, serviceName, instance.isEphemeral()):
createServiceIfAbsent(namespaceId, serviceName, local, null)://根据 namespaceId, serviceName 去缓存中查询一下是否已经有 service 
Service service = getService(namespaceId, serviceName);
if (service == null) {//没有则注册service = new Service();//省略属性赋值...putServiceAndInit(service);//这个local就是是否临时的意思 是临时就返回 true 默认就是trueif (!local) {addOrReplaceService(service);}
}
putServiceAndInit(service)://Map<String, Map<String, Service>>
//key 为 namespaceId; value 为 Map<service.getName(), service>
putService(service);
//从缓存中获取
service = getService(service.getNamespaceId(), service.getName());
//注册一个 心跳检查任务
//维护一个 Map<String, Cluster> clusterMap 执行所有的 value.init()
service.init();
//注册对一个Servce 发生变动的监听
//最后一个参数是 是否是临时节点
String key = KeyBuilder.buildInstanceListKey(namespaceId(), name(), true);
consistencyService.listen(key , service);
key = KeyBuilder.buildInstanceListKey(namespaceId(), name(), false);
consistencyService.listen(key , service);

实例注册-注册(Nacos)Service

addInstance(namespaceId, serviceName, instance.isEphemeral(), instance):

相关文章:

001-Nacos 服务注册

目录 Nacos介绍注册中心架构面临问题源码分析实例注册-接口实例注册-入口实例注册-创建一个(Nacos)Service实例注册-注册(Nacos)Service Nacos 介绍 Dynamic Naming and Configuration Service 动态的命名和配置服务 反正可以实现注册中心的功能 注册中心架构 服务提供者 …...

71 # 协商缓存的配置:通过内容

对比&#xff08;协商&#xff09;缓存 比较一下再去决定是用缓存还是重新获取数据&#xff0c;这样会减少网络请求&#xff0c;提高性能。 对比缓存的工作原理 客户端第一次请求服务器的时候&#xff0c;服务器会把数据进行缓存&#xff0c;同时会生成一个缓存标识符&#…...

【服务器】Strace显示后台进程输出

今天有小朋友遇到一个问题 她想把2331509和2854637这两个进程调到前台来&#xff0c;以便于在当前shell查看这两个python进程的实时输出 我第一反应是用jobs -l然后fg &#xff08;参考这里&#xff09; 但是发现jobs -l根本没有输出&#xff1a; 原因是jobs看的是当前ses…...

centos如何安装libssl-dev libsdl-dev libavcodec-dev libavutil-dev ffmpeg

在 CentOS 系统上安装这些包可以按照以下步骤进行&#xff1a; 打开终端&#xff0c;使用 root 或具有管理员权限的用户登录。 使用以下命令安装 libssl-dev 包&#xff1a; yum install openssl-devel使用以下命令安装 libsdl-dev 包&#xff1a; yum install SDL-devel使用以…...

2022年12月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题:数组逆序重放 将一个数组中的值按逆序重新存放。例如,原来的顺序为8,6,5,4,1。要求改为1,4,5,6,8。 输入 输入为两行:第一行数组中元素的个数n(1 输出 输出为一行:输出逆序后数组的整数,每两个整数之间用空格分隔。 样例输入 5 8 6 5 4 1 样例输出 1 4 5 6 8 以下是…...

详谈MongoDB的那些事

概念区分 什么是关系型数据库 关系型数据库&#xff08;Relational Database&#xff09;是一种基于关系模型的数据库管理系统&#xff08;DBMS&#xff09;。在关系型数据库中&#xff0c;数据以表格的形式存储&#xff0c;表格由行和列组成&#xff0c;行表示数据记录&…...

企业电子招投标采购系统源码之电子招投标的组成 tbms

​ 功能模块&#xff1a; 待办消息&#xff0c;招标公告&#xff0c;中标公告&#xff0c;信息发布 描述&#xff1a; 全过程数字化采购管理&#xff0c;打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&#xff0c;为…...

Android 13 添加自定义分区,恢复出厂设置不被清除

需求: 客户有些文件或数据,需要做得恢复出厂设置还存在,故需新增一个分区存储客户数据。 要求: a) 分区大小为50M b) 应用层可读可写 c) 恢复出厂设置后不会被清除 d) 不需要打包.img e) 不影响OTA升级 缺点: 1).通过代码在分区创建目录和文件,会涉及到SeLinux权限的修…...

改进YOLO系列:1.添加SE注意力机制

添加SE注意力机制 1. SE注意力机制论文&#xff12;. SE注意力机制原理&#xff13;. SE注意力机制的配置&#xff13;.&#xff11;common.py配置&#xff13;.&#xff12;yolo.py配置&#xff13;.&#xff13;yaml文件配置 1. SE注意力机制论文 论文题目&#xff1a;Squee…...

RP2040开发板自制树莓派逻辑分析仪

目录 前言 1 准备工作和前提条件 1.1 Raspberry Pi Pico RP2040板子一个 1.2 Firmware-LogicAnalyzer-5.0.0.0-PICO.uf2固件 1.3 LogicAnalyzer-5.0.0.0-win-x64软件 2 操作指南 2.1 按住Raspberry Pi Pico开发板的BOOTSEL按键&#xff0c;再接上USB接口到电脑 2.2 刷入…...

git clone -b与git pull origin <branch_name>的区别

git clone -b 和 git pull origin <branch_name> 都是用于在 Git 中操作分支的命令&#xff0c;但它们有不同的用途和行为。 git clone -b 这是在克隆仓库时指定要克隆的特定分支的命令。它用于在克隆一个仓库的同时指定要克隆的分支。例如&#xff0c;如果你只想克隆一…...

中期国际:MT4数据挖掘与分析方法:以数据为导向,制定有效的交易策略

在金融市场中&#xff0c;制定有效的交易策略是成功交易的关键。而要制定一份可靠的交易策略&#xff0c;数据挖掘与分析方法是不可或缺的工具。本文将介绍如何以数据为导向&#xff0c;利用MT4进行数据挖掘与分析&#xff0c;从而制定有效的交易策略。 首先&#xff0c;我们需…...

Linux命令(70)之bzip2

linux命令之bzip2 1.bzip2介绍 linux命令bzip2是用来压缩或解压缩文件名后缀为".bz2"的文件 2.bzip2用法 bzip2 [参数] filename bzip2常用参数 参数说明-d解压缩文件-t测试压缩文件是否正确-k压缩后&#xff0c;保留源文件-z强制压缩-f强制覆盖已存在的文件-v显…...

ubuntu下gif动态图片的制作

Gif图片比视频小, 比静态JPG图片形象生动, 更适用于产品展示和步骤演示等。各种各样的gif动图为大家交流提供很大的乐趣. 这里简单介绍ubuntu系统下gif图的制作。 一、工具安装: kazam和ffmpeg kazam是linux下的一款简单但是功能强大的屏幕录制工具. 它可录制声音并选择全屏录…...

56.linux 进程管理命令和用户管理命令

目录 一、进程管理命令 1.ps 2.pstree 3.kill 4.pkill 5.&后台运行程序 6.jobs 7.fg bg 8.top 二、用户管理命令 1.系统存储用户信息的文件 2.添加新用户 3.修改用户密码 4.删除用户 一、进程管理命令 1.ps 用于查看当前系统中运行的进程信息。它可以…...

Mac os 上的apt-get install 就是brew install

Mac os 上面不支持apt-get install ,但是有个 brew install可以代替。 Homebrew是Mac OS的包管理器&#xff0c;可以方便地安装各种需要的软件。 1.1 安装Homebrew 如果没有安装Homebrew&#xff0c;需要在终端输入以下命令进行安装&#xff1a; /usr/bin/ruby -e "$(…...

vue watch监听对象 新旧值一样

vue3中watch监听新旧值一样的处理方式 废话不多说&#xff0c;直接上代码 const objectReactive reactive({user: {id: 1,name: zhangsan,age: 18,}, }) watch(() > objectReactive.user,(n, o) > {console.log(n, o)if (JSON.stringify(n) JSON.stringify(o)) {retu…...

学习Vue:测试与调试

在Vue.js开发过程中&#xff0c;测试与调试是确保代码质量和稳定性的重要环节。本文将介绍单元测试与集成测试的概念&#xff0c;以及如何使用Vue Devtools进行调试。同时&#xff0c;也会分享一些常见问题的排查与解决方法&#xff0c;帮助您更好地进行测试和调试工作。 单元测…...

pg使用sql将文本字符串转换成时间格式

使用 PostgreSQL 数据库的 SQL 查询语句将文本字符串转换为时间格式&#xff0c;可以使用 to_timestamp 函数。 假设您的文本字符串时间格式为 “yyyy-MM-dd HH:mm:ss”&#xff0c;您可以使用以下 SQL 查询来转换&#xff1a; SELECT to_timestamp(2023-08-13 19:05:22, YYY…...

WordPress中实现层级文章的访问权限继承

这篇文章也可以在我的博客中查看 本文内容 在WordPress中存在层级文章的设定&#xff0c;常见于&#xff1a;Page、Custom Post Type 有时候我们需要让子文章的访问权“继承”于父文章&#xff0c;即&#xff1a; 当父文章为私有、草稿时&#xff0c;子文章也无法被公开访问…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...