三、Spring Cloud Alibaba组件nacos

news2024/11/23 2:24:06

一、什么是Nacos

官方地址:
https://nacos.io/zh-cn/docs/v2/what-is-nacos.html
概念:
服务(Service)是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理。即集注册中心+配置中心+服务管理的一个平台

Nacos 的关键特性包括:

  • 服务发现和服务健康监测
  • 动态配置服务
  • 动态 DNS 服务
  • 服务及其元数据管理

在这里插入图片描述

二、Nacos注册中心

注册中心演变和设计思想
(1)刚开始分布式远程调用(地址在代码中)。
存在的问题:地址发生改变需修改代码和版本发布。

(2)进一步演化为:手动维护一份注册表,将服务信息、服务名称维护到注册表。一共服务去调用另外一个服务时,根据服务名称去注册表中获取进行调用。
存在的问题:服务水平扩容,涉及到负载均衡的问题以及某个服务宕机了,我不知道。

(3)进一步引入Nginx:将所有的服务配置到nginx,通过nginx调用服务。
存在的问题:服务太多以及nginx配置文件变得复杂,服务健康检查不健全。

(4)进一步演变:mysql存储的注册中心,有一个注册表,存储服务列表(包括服务名、IP、端口、健康状态等)。
服务启动时,注册一条信息到注册表。
服务要调用其他服务时,去注册中心获取服务信息,就是去表中查询。
根据查询出的服务信息,选择服务进行远程调用。
存在的问题:服务挂了,注册中心不知道。

(5)最终实现:在上面基础上,引入心跳机制,在服务注册和服务调用都有该机制。
服务注册:服务会在本地维护一个定时任务,一段时间5s发送一个心跳到注册中心,注册中心超过5s没收到服务的心跳机制,则认为这个服务挂了,把服务状态修改为down。如果超过30s没收到心跳,则把该服务从注册中心剔除。
服务调用:调用也会有一个定时任务,实时去注册表中调用获取最新健康的服务列表,然后进行缓存,客户端从直接从缓存获取到接口进行使用。
注册中心是一个单独的Nacos服务,需要单独下载部署。
在这里插入图片描述

三、服务发现

https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-discovery
服务注册发现: Nacos Discovery Starter
服务发现是微服务架构体系中最关键的组件之一。如果尝试着用手动的方式来给每一个客户端来配置所有服务提供者的服务列表是一件非常困难的事,而且也不利于服务的动态扩缩容。Nacos Discovery Starter 可以帮助您将服务自动注册到 Nacos 服务端并且能够动态感知和刷新某个服务实例的服务列表。除此之外,Nacos Discovery Starter 也将服务实例自身的一些元数据信息-例如 host,port,健康检查URL,主页等-注册到 Nacos 。

四、核心功能

服务注册:
Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。Nacos Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存Map中。

服务心跳:
在服务注册后,Nacos Client会维护一个定时心跳来持续通知nacos Server,说明服务一直处于可用状态,防止被剔除。默认5s发送一次心跳。

服务同步:
Nacos Server集群之间会互相同步服务实例,用来保证服务信息的一致性。

服务发现:
服务消费者 (Nacos Client)在调用服务提供者的服务时,会发送一个REST请求Nacos server,获上面注册的服务清单,并且存在Nacos client本地,同时会在Nacos client本地启一个定时任务定时拉取服务端最新的注册表信息更新到本地缓存。

服务健康检查:
Nacos server会开一个定时任务用来检查注册服务实例的健康情况,对于超过15s没有收到客户满心跳的实例会将它的heathy属性置为false(客户端服务发现时不会被查询到),如果某实例超过30秒没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送心跳则会重新注册)。

五、主流的注册中心

在这里插入图片描述
CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错(Partition-tolerance)。在一个分布式系统中三个要素不可同时具有,只能选择其中两个。
C: 一致性,所有的数据备份在同一时刻具有同样的值,强一致性;
A:可用性,保证无论请求成功或失败,系统都会给出响应;
P:分区容错性,指的是系统任意信息的丢失都不会影响系统的继续运行,或任意节点的丢失,都不影响其他节点的继续运行。
因为在分布式系统中分区容错性必须保证,放弃P则不是分布式系统。则只有CP和AP组合。
CAP原理详解

六、Nacos单机部署

1、下载地址:https://github.com/alibaba/nacos/releases/tag/1.4.2
根据cloud Alibaba下载对应版本,我们下载1.4.2版本。
在这里插入图片描述
2、下载后解压:
windows下运行使用cmd后缀,linux使用sh后缀。
在这里插入图片描述

Linux/Unix/Mac

启动命令(standalone代表着单机模式运行,非集群模式):

sh startup.sh -m standalone

如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:

bash startup.sh -m standalone

Windows

启动命令(standalone代表着单机模式运行,非集群模式):

startup.cmd -m standalone

3、默认为集群。standalone可以在启动文件的配置文件中修改。修改为单机模式,直接双击启动即可。

在这里插入图片描述

4、启动。
配置文件配置,我们本地默认单机启动,不用修改,直接运行startup.cmd启动。
可以在nacos\conf\application.properties中配置。
了解配置文件信息-如图:
在这里插入图片描述

启动成功提示:
在这里插入图片描述

5、登录
然后根据上面提示访问即可,我的: http://192.168.1.4:8848/nacos/index.html
账号和密码都是nacos,登录后界面如图:
在这里插入图片描述

6、nacos和服务结合
下面将我们的服务和nacos结合, 在maven中引入nacos,然后注册到nacos。
重新复制一份,起名为nacos的微服务,如图,并且在父maven中引入子模块。
在这里插入图片描述

可能会出现复制的模块不是一个工程,如何搞定?
Ignored files中取消勾选,有时候maven会把它进行排除。
在这里插入图片描述
在order-nacos和stock-nacos的pom中引入nacos的服务与发现,配置信息:

<!--nacos的服务注册与发现,无需写版本,spring-cloud-alibaba-dependencies会自动维护-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

如图:
在这里插入图片描述
然后修改order-nacos 8815端口和stock-naco 8816端口的配置文件,修改端口和加入nacos的相关配置。

server:
  port: 8815

#应用名称,nacos会将该名称当做服务名称
spring:
  application:
    name: order-service
  cloud:
    nacos:
      #nacos地址
      server-addr: 127.0.0.1:8848
      discovery:
        username: nacos
        password: nacos
        #命名空间,可以根据空间进行一个隔离
        namespace: public

在这里插入图片描述
然后启动这两个服务。会在日志界面看到c.a.c.n.registry.NacosServiceRegistry : nacos registry, DEFAULT_GROUP order-service 192.168.1.4:8815 register finished这样一条日志,说明已经注册到nacos。
在这里插入图片描述

启动成功后,在nacos界面查看验证一下,会在nacos服务列表界面看到两个服务已经注册进来。
在这里插入图片描述
后台停止stock-naco服务,观察服务列表的变化。主要是和上面的理论调用过程相结合。
(1)15s左右,变成红色,不可用。
(2)30s之后,这条服务列表就会被删除。
在这里插入图片描述

服务调用的演示:
在这里插入图片描述
因nacos需负载均衡发现对应的服务地址,需在RestTemplate中添加一个LoadBalanced注解,相当于一个负载均衡。
在这里插入图片描述

测试:
访问:http://localhost:8815/order/addNacos
在这里插入图片描述
7、模拟负载均衡轮询机制。
(1)复制一个stock服务。
在这里插入图片描述
在这里插入图片描述
(2)修改StockController接口,把端口给返回去,页面接口请求,观察端口情况。
在这里插入图片描述
(3)结果:8817和8816循环请求。
在这里插入图片描述在这里插入图片描述

说明:nacos默认采用Ribbon的负载均衡。

七、nacos管理界面介绍

1、命名空间

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

服务详情页面
在这里插入图片描述

在这里插入图片描述

八、nacos的配置说明

server:
  port: 8815

#应用名称,nacos会将该名称当做服务名称
spring:
  application:
    #默认为${spring.application.name},也可以通过该选项配置
    name: order-service
  cloud:
    nacos:
      #nacos地址
      server-addr: 127.0.0.1:8848
      discovery:
        username: nacos
        password: nacos
        #命名空间,可以根据空间进行一个隔离
        namespace: public
        #设置为永久实例,实例挂了还会存在。默认true为临时实例
        ephemeral: false
        #默认为 DEFAULT_GROUP,更细的相同特征的服务分组管理
        group: DEFAULT_GROUP
        #通常结合安装权重的负载均衡策略,权重越高流量越大
        weight: 1
        #可以根据结合元数据做扩展
        metadata: 

九、nacos的集群搭建

官方地址:https://nacos.io/zh-cn/docs/v2/guide/admin/cluster-mode-quick-start.html

步骤:
在这里插入图片描述

  1. 复制三个nacos文件包,重命名为nacos8849、nacos8850、nacos8851。
    在这里插入图片描述

  2. 分别修改三个文件包中conf\application.properties的配置文件为mysql,同时修改为对应的三个端口。
    案例修改nacos8849的配置文件:在这里插入图片描述

  3. 执行conf\nacos-mysql.sql中的SQL进行建表。建表后如图:
    在这里插入图片描述

  4. 将cluster.conf.example文件中改为cluster.conf,添加节点配置。
    在这里插入图片描述

  5. 如何出现内存不足可以修改启动的JVM参数。

set "NACOS_JVM_OPTS=-server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=128m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%BASE_DIR%\logs\java_heapdump.hprof -XX:-UseLargePages"

在这里插入图片描述

  1. 分别启动nacos8849、nacos8850、nacos8851服务。注意启动脚本设置为set MODE=“cluster”。如果是windows环境启动路径不能带有中文路径。
    可以先启动一个进行测试再配置其他的。页面访问测试。在这里插入图片描述 9. 修改nginx配置,如下:
server {
	listen 8847;
	location /nacos/ { 
		proxy_pass http://nacoscluster/nacos/;
	}
}
upstream  nacoscluster{
	server 127.0.0.1:8849;
	server 127.0.0.1:8850;
	server 127.0.0.1:8851;
}

最后用代理端口8847访问测试。
http://localhost:8847/nacos
在这里插入图片描述

然后修改代码中配置文件地址为8847端口即可。
在这里插入图片描述
至此,nacos集群配置完成。

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

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

相关文章

【苹果推IM,苹果iMessage相册推】当Apple APNS推送服务器从您的应用程序接吸取注册消息时,它将为您回到一串devicetoken(很是重要)

推荐内容IMESSGAE相关 作者✈️IMEAE推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者✈️IMEAE推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者✈️IMEAE推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者✈️IMEAE推荐内容3.日历推 *** …

养鱼-新手快乐缸阶段的一点总结

这是学习笔记的第 2456篇文章 养鱼这件事情上&#xff0c;除了满足了孩子的希望&#xff0c;也算是满足了自己的一点爱好。 从3月份开始的鱼缸进化到现在&#xff0c;对于养鱼这件事情的态度已经发生了很大的变化&#xff0c;我也趁此机会总结和梳理一下&#xff0c;先来定性我…

第三章:JavaScript 脚本语言(二)

最近发生了好多事情。 一、String对象 String对象是动态对象&#xff0c;需要创建实例后才可以引用其方法与属性。在js中也可以直接使用单引号或者双引号来直接创建实例化的对象。 anchor(name) 为字符串对象内容两边加上html<a name name></a>标记对bi…

【网络】网络基础入门

文章目录 局域网和广域网协议协议概念协议分层数据传输条件 OSI七层模型&#xff08;了解&#xff09;TCP/IP五层&#xff08;四层&#xff09;模型网络传输基本流程报头局域网通信原理以太网(了解)网络传输流程图数据包封装和分用 六、IP与MAC地址 局域网和广域网 独立模式: …

springboot+vue垃圾分类网站(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的垃圾分类网站。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风歌&a…

苹果备忘录误删了怎么恢复?恢复备忘录的3个方法!

案例&#xff1a;苹果删除的备忘录怎么恢复&#xff1f; 【友友们&#xff0c;苹果备忘录删除的备忘录在哪里可以恢复&#xff1f;有什么方法吗&#xff1f;】 苹果备忘录是日常生活中经常使用的一种记录方式&#xff0c;它可以帮助我们记录生活琐事、工作事项以及其他需要记录…

自动驾驶行业观察之2023上海车展-----车企发展趋势(3)

合资\外资发展 宝马&#xff1a;i7、iX1新车亮相&#xff0c;未来将持续发力电动化、数字化&#xff08;座舱&#xff09; 宝马在本次车展重点展示了电动化产品&#xff0c;新发车型为i7 M70L、iX1、及i vision Dee概念车等车型。 • 展示重点&#xff1a;电动化数字化&…

C/C++每日一练(20230505) 扩展兔子数列、删除重复项、寻找最小值

目录 1. 求尾数与常数之和 &#x1f31f; 2. 删除有序数组中的重复项 &#x1f31f; 3. 寻找旋转排序数组中的最小值 &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日…

Selenium原理以及Python从零实现

Selenium简介 Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。支持的浏览器包括IE&#xff08;7, 8, 9, 10, 11&#xff09;&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Google Chrome&a…

使用zabbix监控Windows指定服务| zabbix Windows service filter

环境&#xff1a;Centos Zabbix6 问题&#xff1a;使用自带的windows服务监控带出了所有的服务&#xff0c;只想监控特定的服务 解决办法&#xff1a;使用正则表达式过滤 背景&#xff1a;在Zabbix6中&#xff0c;使用自带的windows服务监控带出了所有的服务&#xff0c;只想监…

数据分析如何入门?这4类 Excel 函数助你从小白到大神

Excel是我们从事数据分析的朋友们&#xff0c;会经常用到的最基本的工具。而Excel函数又是Excel中最为重要的、最为常用的知识点&#xff0c;我们必须要掌握。 基于此&#xff0c;今天就分类为大家讲述最为常用的Excel函数。 逻辑函数 1、and 2、or 3、if 当使用了if(…

Leetcode326. 3 的幂

Every day a leetcode 题目来源&#xff1a;326. 3 的幂 相似题目&#xff1a;342. 4的幂 解法1&#xff1a;递归 代码&#xff1a; /** lc appleetcode.cn id326 langcpp** [326] 3 的幂*/// lc codestart class Solution { public:bool isPowerOfThree(int n){if (n <…

【软考高项笔记】第1章 信息化发展1.4 数字中国

1.4 数字中国 我国信息化发展的主旋律 迎接数据时代&#xff0c;激活数据要素的潜能&#xff0c;推进网络强国建设&#xff0c;加快建设数据经济、数据社会、数据政府、以数字化转型整体驱动生产方式&#xff0c;生活方式和治理方式变革1.4.1 数字经济 新技术经济范式&#xf…

港联证券|人工智能走高,掌阅科技三连板,海天瑞声等大幅拉升

人工智能概念5日盘中发力走高&#xff0c;截至发稿&#xff0c;光云科技“20cm”涨停&#xff0c;彩讯股份、云从科技涨超13%&#xff0c;汉王科技、焦点科技、掌阅科技、竞业达等涨停&#xff0c;世纪天鸿、海天瑞声涨超8%。 值得注意的是&#xff0c;掌阅科技已接连三个交易日…

BM5 合并k个已排序链表

合并k个已排序的链表_牛客题霸_牛客网 (nowcoder.com) class Solution {public://两个有序链表合并函数ListNode* Merge2(ListNode* pHead1, ListNode* pHead2) {if(!pHead1) return pHead2;if(!pHead2) return pHead1;if(pHead1->val < pHead2->val){pHead1->next…

Linux搭建我的世界服务器 + 公网远程联机教程「不需要公网IP」

文章目录 前言1. 安装JAVA2. MCSManager安装3.局域网访问MCSM4.创建我的世界服务器5.局域网联机测试6.安装cpolar内网穿透7. 配置公网访问地址8.远程联机测试9. 配置固定远程联机端口地址9.1 保留一个固定tcp地址9.2 配置固定公网TCP地址9.3 使用固定公网地址远程联机 转载自内…

Linux服务器安装部署MongoDB数据库 - 无公网IP远程连接

目录 前言 1. 配置Mongodb源 2. 安装MongoDB 3. 局域网连接测试 4. 安装cpolar内网穿透 5. 配置公网访问地址 6. 公网远程连接 7. 固定连接公网地址 8. 使用固定地址连接 转载自Cpolar Lisa文章&#xff1a;Linux服务器安装部署MongoDB数据库 - 无公网IP远程连接「内网…

IP库新增10多个功能IP

本文涵盖了从初学者到专家级别的FPGA 项目及IP。所有 FPGA 项目都带有开源的源代码。 IP库简介 一直想做一个可以供大家学习、使用的开源IP库&#xff0c;类似OpenCores&#xff0c;OC上IP在领域内的IP很少&#xff0c;通用性强一点&#xff0c;所以作为OC的“补充”&#xff0…

[架构之路-182]-《软考-系统分析师》-19- 系统可靠性分析与设计 - 概览

前言&#xff1a; 可靠性工程是研究产品生命周期中故障的发生、发展规律&#xff0c;达到预防故障&#xff0c;消灭故 障&#xff0c;提高产品可用性的工程技术。 信息系统的可靠性是指系统在满足一定条件的应用环境中能够正常工作的能力&#xff0c;可以按一般工程系统的可靠性…

【KVM虚拟化】· virsh管理命令

目录 &#x1f341;libvirt架构概述 &#x1f341;使用virsh管理虚拟机 &#x1f342;常用命令总结 &#x1f341;kvm基本功能管理 &#x1f342;帮助命令 &#x1f342;KVM的配置文件存放目录 &#x1f342;查看虚拟机状态 &#x1f342;虚拟机关机与开机 &#x1f342;强制虚…