Nacos注册中心 --学习笔记

Nacos注册中心是什么?

想象一下一个繁忙的购物中心,里面有很多商店,每个商店都在某个位置提供不同的商品或服务。这个购物中心有一个信息台,人们可以在这里查询任何商店的位置和提供的服务。等到有新的商店开张,或者现有商店搬走,信息台的信息也会随之更新,确保顾客总能找到他们想要的东西。

现在,如果我们把这个购物中心比作微服务架构,那么Nacos注册中心就是那个提供最新信息的信息台。每个微服务启动时,都会向Nacos注册中心“报到”。当有微服务下线或更新时,注册中心也会实时更新这些信息。而当其他服务或用户需要用到某个服务时,它们就会通过Nacos找到所需的服务,并进行通信。

简单来说,Nacos注册中心的作用主要包括:

  1. 服务注册:微服务在启动时,将自己的信息,如服务地址、端口等注册到Nacos中。
  2. 服务发现:当微服务需要调用其他服务时,会向Nacos查询所需服务的实时信息,并根据这些信息来发起通信。
  3. 服务健康检查:Nacos会定期检查注册服务的健康状态,一旦发现服务出现问题,会从注册列表中摘除,确保调用方不会访问到失效的服务。

总之,Nacos注册中心就是微服务架构中维护服务列表、状态和提供服务发现功能的信息集散中心,它确保了服务间的通信是基于最新和健康的服务实例。

在docker中使用Nacos的准备工作

1、准备外部数据库,用来存储Nacos的数据。

2、使用custom.env文件定义Nacos的环境变量
外部数据库数据源和nacos环境配置文件:百度网盘 请输入提取码
记得将环境配置文件中的mysql相关配置改成自己的

3、获取nacos镜像,创建nacos容器并指定custom.env文件

docker run -d \
--name nacos \
--env-file ./nacos/custom.env \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
--restart=always \
nacos/nacos-server

确保当前目录下有nacos文件夹(里面是custom.env 也就是nacos环境配置文件),如果mysql也部署在docker中,可以通过--network指定nacos容器和mysql容器在同一个网络

Nacos的使用

1、注册

成功创建nacos容器之后,可以通过http://虚拟机ip地址:8848/nacos/来访问nacos:

首次访问会跳转到登录页,账号密码都是nacos。

然后在需要注册或需要使用服务的服务中引入nacos依赖:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

在项目配置文件中添加nacos的配置信息:

spring:
  application:
    name: item-service # 服务名称
  cloud:
    nacos:
      server-addr: 192.168.88.130:8848 # nacos地址

如此,配置好的服务就会在启动时自动注册到nacos注册中心

2、使用

服务发现除了要引入nacos依赖以外,由于还需要负载均衡,因此要引入SpringCloud提供的LoadBalancer依赖(nacos依赖也是需要的):

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

配置nacos地址:

spring:
  cloud:
    nacos:
      server-addr: 192.168.150.101:8848

接下来,服务调用者就可以去订阅服务了。不过服务可能有多个实例,而真正发起调用时只需要知道一个实例的地址。

因此,服务调用者必须利用负载均衡的算法,从多个实例中挑选一个去访问。常见的负载均衡算法有:

  • 随机

  • 轮询

  • IP的hash

  • 最近最少访问

  • ...

另外,服务发现需要用到一个工具,DiscoveryClient,SpringCloud已经帮我们自动装配,我们可以直接注入使用:

接下来就可以通过DiscoveryClient的方法通过负载均衡算法获取到一个服务地址去调用:

实例:

        //2.1根据服务名称获取服务的实例列表
        List<ServiceInstance> instances = discoveryClient.getInstances("item-service");
        if(CollUtil.isEmpty(instances)){
            //判断是否为空
            return;
        }
        //2.2手写负载均衡()这里是最简单的随机负载均衡,从服务列表中获得一个实例
        ServiceInstance serviceInstance = instances.get(RandomUtil.randomInt(instances.size()));
        //2.1 利用RestTemplate发起http请求,得到http的响应
        ResponseEntity<List<ItemDTO>> response = restTemplate.exchange(
                serviceInstance.getUri() + "/items?ids={ids}",
                HttpMethod.GET,
                null,
                new ParameterizedTypeReference<List<ItemDTO>>() {
                },
                Map.of("ids", CollUtil.join(itemIds, ","))
        );
        //2.2 解析响应
        if(!response.getStatusCode().is2xxSuccessful()){
            //查询失败,直接结束
            return;
        }
        //查询成功,取出响应体
        List<ItemDTO> items = response.getBody();

不知道restTemplate是什么的可以看我的关于restTemplate的文章:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

海南聚广众达电子商务咨询有限公司靠谱吗?

在数字经济的浪潮中&#xff0c;抖音电商作为新兴业态&#xff0c;正以其独特的魅力和强大的势能&#xff0c;改变着传统商业模式&#xff0c;引领着新一轮的消费潮流。海南聚广众达电子商务咨询有限公司&#xff0c;作为抖音电商服务领域的佼佼者&#xff0c;凭借其专业的团队…

Linux 多线程 生产者消费者 问题

在 Linux 系统中&#xff0c;生产者和消费者问题是一个经典的多线程同步问题&#xff0c;用于描述如何在多线程环境中协调多个线程对共享资源的访问。这个问题通常涉及两个类型的线程&#xff1a;生产者线程和消费者线程。生产者线程负责生成数据并将其放入缓冲区&#xff0c;而…

大数据之Schedule调度错误(一)

当我们在利用ooize发起整个任务的调度过程中,如果多个调度任务同时运行并且多个调度任务操作了相同的表,那么就会出现如下的错误关系: Invalid path hdfs://iZh5w01l7f8lnog055cpXXX:8000/user/admin/xxx: No files matching path hdfs://iZh5w01l7f8lnog055cpXXX:8000/user/ad…

VS2017配置OpenCV4.5.1

VS2017配置OpenCV 一、下载OpenCV二、配置OpenCV的电脑环境变量三、配置visual Studio添加路径复制文件到C盘 四、如何使用注意运行时选择Debug x64 五、报错&#xff1a;VSOpencv出现&#xff1a;xxx处有未经处理的异常: Microsoft C 异常: cv::Exception&#xff0c;位于内存…

iLogtail 2.0 重大升级,端上支持 SPL

作者&#xff1a;太业 流式处理语言发展 早期流式处理概念&#xff1a; 20 世纪 70 年代&#xff0c;编程语言如 APL 提供了对数组的流式操作&#xff0c;这可以看作是流式处理语法的早期形式。管道&#xff08;Pipes&#xff09;概念在 UNIX 系统中的引进使得可以通过命令行将…

opencv进阶 ——(十)图像处理之基于dlib人脸检测与识别

Dlib是一个功能丰富的C库&#xff0c;设计用于构建复杂的软件系统&#xff0c;尤其在机器学习、计算机视觉和数值计算等领域有着广泛的应用。以下是对Dlib的简要介绍&#xff1a; 特性&#xff1a; 机器学习算法&#xff1a;Dlib包含了各种机器学习算法&#xff0c;如支持向量机…

友思特应用 | 慧眼识珠:如何实现无障碍高光谱成像?

导读 近红外相机可帮助人眼捕捉不同材料之间光谱特征的微小差异。友思特 Monarch 微型可调近红外相机以其小体积、低成本、高性能&#xff0c;3步即可快速实现各种材料的分类应用。 多光谱成像 每个物品都是由不同的化学物质组成的&#xff0c;这些化学物质的反射随光谱带的不…

机器学习18个核心算法模型

1. 线性回归&#xff08;Linear Regression&#xff09; 用于建立自变量&#xff08;特征&#xff09;和因变量&#xff08;目标&#xff09;之间的线性关系。 核心公式&#xff1a; 简单线性回归的公式为&#xff1a; , 其中 是预测值&#xff0c; 是截距&#xff0c; 是斜…

ASCE(美国土木工程师学会)文献校外去哪里查找下载

今天要讲的数据库是ASCE&#xff08;美国土木工程师学会&#xff09;&#xff0c;该数据库每年出版5万多页的专业期刊、杂志、会议录、专著、技术报告、实践手册和标准等。目前&#xff0c;ASCE数据库中包含35种期刊(1983年至今)、近700卷会议录( 1996年至今)、Civil Engineeri…

10分钟了解KEDA高效弹性伸缩方案

文章目录 为什么需要 KEDA &#xff1f;KEDA 的原理哪些场景适合使用 KEDA &#xff1f;微服务多级调用任务执行&#xff08;生产者与消费者&#xff09;周期性规律 配置实践KEDA安装helm 方式安装 策略配置scaledobject 对象说明 问题记录 为什么需要 KEDA &#xff1f; HPA …

五、nodejs存储图片

nodejs存储图片 // 静态托管和数据库创建 创建数据库 新建Public进行静态托管 新建个img的文件夹 在index.js里 // 托管静态 app.use(/public, express.static(./Public))//托管静态资源 /*** 1.引入一个express框架* 2.在加载所有服务模块前&#xff0c;要先连接数据库* …

AST 在前端开发中的应用与实践:从代码分析到自动化转换

抽象语法树&#xff08;AST&#xff0c;Abstract Syntax Tree&#xff09;在前端开发中有着广泛的应用。它是编译器和工具链的核心组件&#xff0c;使得代码分析、转换、优化等操作成为可能。在前端开发中&#xff0c;AST 主要用于代码编译和转译、代码优化、代码分析、代码格式…

vue对图片进行裁剪

安装依赖&#xff1a; npm install cropperjs -save <template><div class"bigBox"><h3>预览</h3><!-- 裁剪按钮--><el-button click"sureSava">裁剪</el-button><el-button click"confirm">确…

元宇宙3D品牌营销虚拟场景提升客户对企业的黏性

在这个充满创意与想象的3D元宇宙时代&#xff0c;我们为您推出了全新的3D元宇宙场景在线制作编辑平台&#xff0c;让您轻松构建专属的虚拟展厅&#xff0c;展现无限可能。 3D元宇宙场景在线制作编辑平台允许您快速完成空间设计&#xff0c;根据您的个性化需求&#xff0c;自由设…

1.1 QT随手简记(一)

QT学习篇1 1. QT简介 Qt是一个跨平台的库&#xff0c;它提供了丰富的功能&#xff0c;用于开发GUI应用程序、桌面应用程序、移动应用程序和嵌入式应用程序。Qt由Qt公司维护&#xff0c;是一个开源项目&#xff0c;支持多种操作系统&#xff0c;包括Windows、Linux、Mac OS等。…

Django路由与会话深度探索:静态、动态路由分发,以及Cookie与Session的奥秘

系列文章目录 Django入门全攻略&#xff1a;从零搭建你的第一个Web项目Django ORM入门指南&#xff1a;从概念到实践&#xff0c;掌握模型创建、迁移与视图操作Django ORM实战&#xff1a;模型字段与元选项配置&#xff0c;以及链式过滤与QF查询详解Django ORM深度游&#xff…

clickhouse(十五、存储优化实践)

文章目录 背景问题定位优化方式排序键设计写入顺序压缩算法 DoubleDeltaLowCardinality避免使用Nullable 总结 背景 clickhouse集群容量告警&#xff0c;项目中某些表占据大量的存储空间&#xff0c;借此机会对ck的存储优化进行实践学习&#xff0c;并通过多种方式测试验证优化…

元宇宙NFG交易市场:减少出入金的税和消泡沫

在元宇宙的宏伟画卷中&#xff0c;NFG&#xff08;非同质化商品&#xff09;以其独特魅力逐渐崭露头角&#xff0c;成为连接现实世界与数字世界的桥梁。NFG不仅仅是一种商品&#xff0c;更是一种创新的商业模式&#xff0c;为资金的流动与税收优惠带来了新的可能。 首先&#…

QT error: allocation of incomplete type ‘Ui::Server‘

目录 前言 报错内容&#xff1a; 过程解析&#xff1a; 原因分析&#xff1a; daisy.skye的博客 QT合集http://t.csdnimg.cn/wEVbu 前言 最近又开始需要做上位机了&#xff0c;要知道qt上位机对我来说已经3年没有接触了&#xff0c;最开始接触还是毕业时工作中的简单学习和…

【预计IEEE出版】第四届电子信息工程与计算机技术国际学术会议(EIECT 2024)

第四届电子信息工程与计算机技术国际学术会议&#xff08;EIECT 2024&#xff09; 2024 4th International Conference on Electronic Information Engineering and Computer Technology 2024年11月15-17日 | 中国 深圳 #往届均已成功见刊、EI检索;先投稿&#xff0c;先送审…