SpringCloud 微服务全栈体系(三)

news2024/9/20 6:04:22

第五章 Nacos 注册中心

  • 国内公司一般都推崇阿里巴巴的技术,比如注册中心,SpringCloudAlibaba 也推出了一个名为 Nacos 的注册中心。

一、认识和安装 Nacos

1. 认识 Nacos

  • Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。

在这里插入图片描述

2. 安装 Nacos

2.1 Windows 安装
  • 开发阶段采用单机安装即可。
2.1.1 下载安装包
  • 在 Nacos 的 GitHub 页面,提供有下载链接,可以下载编译好的 Nacos 服务端或者源代码:
  • GitHub 主页:https://github.com/alibaba/nacos
  • GitHub 的 Release 下载页:https://github.com/alibaba/nacos/releases
    在这里插入图片描述
  • windows 版本使用nacos-server-1.4.1.zip包即可。
2.1.2 解压
  • 将这个包解压到任意非中文目录下,如图:
    在这里插入图片描述

  • 目录说明:

    • bin:启动脚本
    • conf:配置文件
2.1.3.端口配置
  • Nacos 的默认端口是 8848,如果你电脑上的其它进程占用了 8848 端口,请先尝试关闭该进程。
  • 如果无法关闭占用 8848 端口的进程,也可以进入 nacos 的 conf 目录,修改配置文件中的端口:
    在这里插入图片描述
  • 修改其中的内容:
    在这里插入图片描述
2.1.4 启动
  • 启动非常简单,进入 bin 目录,结构如下:
    在这里插入图片描述

  • 然后执行命令即可:

    • windows 命令:
    startup.cmd -m standalone
    
  • 执行后的效果如图:
    在这里插入图片描述

2.1.5 访问
  • 在浏览器输入地址:http://127.0.0.1:8848/nacos 即可:
    在这里插入图片描述
  • 默认的账号和密码都是 nacos,进入后:
    在这里插入图片描述
2.2 Linux 安装
2.2.1 安装 JDK
  • Nacos 依赖于 JDK 运行,所以 Linux 上也需要安装 JDK 才行。

  • 上传 jdk 安装包:
    在这里插入图片描述

  • 上传到某个目录,例如:/usr/local/

  • 然后解压缩:

tar -xvf jdk-8u144-linux-x64.tar.gz
  • 然后重命名为 java

  • 配置环境变量:

export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin
  • 设置环境变量:
source /etc/profile
2.2.2 上传安装包
  • 如图:
    在这里插入图片描述
  • 上传到 Linux 服务器的某个目录,例如/usr/local/src目录下:
    在这里插入图片描述
2.2.3 解压
  • 命令解压缩安装包:
tar -xvf nacos-server-1.4.1.tar.gz
  • 然后删除安装包:
rm -rf nacos-server-1.4.1.tar.gz
  • 目录中最终样式:
    在这里插入图片描述
  • 目录内部:
    在这里插入图片描述
2.2.4 端口配置
  • 与 windows 中类似
2.2.5 启动
  • 在 nacos/bin 目录中,输入命令启动 Nacos:
sh startup.sh -m standalone
2.3 Nacos 的依赖
  • 父工程:
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.5.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
  • 客户端:
<!-- nacos客户端依赖包 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

二、服务注册到 nacos

  • Nacos 是 SpringCloudAlibaba 的组件,而 SpringCloudAlibaba 也遵循 SpringCloud 中定义的服务注册、服务发现规范。因此使用 Nacos 和使用 Eureka 对于微服务来说,并没有太大区别。
  • 主要差异在于:
    • 依赖不同
    • 服务地址不同

1. 引入依赖

  • 在 cloud-demo 父工程的 pom 文件中的<dependencyManagement>中引入 SpringCloudAlibaba 的依赖:
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.6.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
  • 然后在 user-service 和 order-service 中的 pom 文件中引入 nacos-discovery 依赖:
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

注意:不要忘了注释掉 eureka 的依赖。

2. 配置 nacos 地址

  • 在 user-service 和 order-service 的 application.yml 中添加 nacos 地址:
spring:
  cloud:
    nacos:
      server-addr: localhost:8848

注意:不要忘了注释掉 eureka 的地址

3. 重启

  • 重启微服务后,登录 nacos 管理页面,可以看到微服务信息:

在这里插入图片描述

三、服务分级存储模型

  • 一个服务可以有多个实例,例如我们的 user-service,可以有:

    • 127.0.0.1:8081
    • 127.0.0.1:8082
    • 127.0.0.1:8083
  • 假如这些实例分布于全国各地的不同机房,例如:

    • 127.0.0.1:8081,在上海机房
    • 127.0.0.1:8082,在上海机房
    • 127.0.0.1:8083,在杭州机房
  • Nacos 就将同一机房内的实例 划分为一个集群

  • 也就是说,user-service 是服务,一个服务可以包含多个集群,如杭州、上海,每个集群下可以有多个实例,形成分级模型,如图:

在这里插入图片描述

  • 微服务互相访问时,应该尽可能访问同集群实例,因为本地访问速度更快。当本集群内不可用时,才访问其它集群。例如:

在这里插入图片描述

  • 杭州机房内的 order-service 应该优先访问同机房的 user-service。

1. 给 user-service 配置集群

  • 修改 user-service 的 application.yml 文件,添加集群配置:
spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ # 集群名称
  • 重启两个 user-service 实例后,我们可以在 nacos 控制台看到下面结果:
    在这里插入图片描述
  • 我们再次复制一个 user-service 启动配置,添加属性:
-Dserver.port=8083 -Dspring.cloud.nacos.discovery.cluster-name=SH
  • 配置如图所示:
    在这里插入图片描述
  • 启动 UserApplication3 后再次查看 nacos 控制台:
    在这里插入图片描述

2. 同集群优先的负载均衡

  • 默认的ZoneAvoidanceRule并不能实现根据同集群优先来实现负载均衡。

  • 因此 Nacos 中提供了一个NacosRule的实现,可以优先从同集群中挑选实例。

2.1 给 order-service 配置集群信息
  • 修改 order-service 的 application.yml 文件,添加集群配置:
spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ # 集群名称
2.2 修改负载均衡规则
  • 修改 order-service 的 application.yml 文件,修改负载均衡规则:
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则

四、权重配置

  • 实际部署中会出现这样的场景:

  • 服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。

  • 但默认情况下 NacosRule 是同集群内随机挑选,不会考虑机器的性能问题。

  • 因此,Nacos 提供了权重配置来控制访问频率,权重越大则访问频率越高。

  • 在 nacos 控制台,找到 user-service 的实例列表,点击编辑,即可修改权重:
    在这里插入图片描述

  • 在弹出的编辑窗口,修改权重:
    在这里插入图片描述

注意:如果权重修改为 0,则该实例永远不会被访问

五、环境隔离

  • Nacos 提供了 namespace 来实现环境隔离功能。

    • nacos 中可以有多个 namespace
    • namespace 下可以有 group、service 等
    • 不同 namespace 之间相互隔离,例如不同 namespace 的服务互相不可见

在这里插入图片描述

1. 创建 namespace

  • 默认情况下,所有 service、data、group 都在同一个 namespace,名为 public:

在这里插入图片描述

  • 我们可以点击页面新增按钮,添加一个 namespace:

在这里插入图片描述

  • 然后,填写表单:

在这里插入图片描述

  • 就能在页面看到一个新的 namespace:
    在这里插入图片描述

2. 给微服务配置 namespace

  • 给微服务配置 namespace 只能通过修改配置来实现。

  • 例如,修改 order-service 的 application.yml 文件:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ
        namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID
  • 重启 order-service 后,访问控制台,可以看到下面的结果:

在这里插入图片描述
在这里插入图片描述

  • 此时访问 order-service,因为 namespace 不同,会导致找不到 userservice,控制台会报错:
    在这里插入图片描述

六、Nacos 与 Eureka 的区别

  • Nacos 的服务实例分为两种类型:

    • 临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认的类型。

    • 非临时实例:如果实例宕机,不会从服务列表剔除,也可以叫永久实例。

  • 配置一个服务实例为永久实例:

spring:
  cloud:
    nacos:
      discovery:
        ephemeral: false # 设置为非临时实例
  • Nacos 和 Eureka 整体结构类似,服务注册、服务拉取、心跳等待,但是也存在一些差异:

在这里插入图片描述

  • Nacos 与 eureka 的共同点

    • 都支持服务注册和服务拉取
    • 都支持服务提供者心跳方式做健康检测
  • Nacos 与 Eureka 的区别

    • Nacos 支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
    • 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
    • Nacos 支持服务列表变更的消息推送模式,服务列表更新更及时
    • Nacos 集群默认采用 AP 方式,当集群中存在非临时实例时,采用 CP 模式;Eureka 采用 AP 方式

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

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

相关文章

力扣每日一题61:旋转链表

题目描述&#xff1a; 给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], k 2 输出&#xff1a;[4,5,1,2,3]示例 2&#xff1a; 输入&#xff1a;head [0,1,2], k 4 输…

LVS之DR模式(最常见的LVS负载方式,直接路由模式)

一、LVS-DR模式的数据流向 1、负载均衡器lvs调度器&#xff1a;只负责请求和转发到后端的真实服务器&#xff0c;但是响应结果&#xff0c;由后端服务器直接转发给客户端&#xff0c;不需要经过调度器的处理&#xff0c;减轻lvs调度器的负担&#xff0c;提高性能和稳定性 二、…

操作系统 常见面试问题之系统寻址空间是多大?虚拟地址与物理地址?内存映射是什么?详细总结

一、系统寻址空间是多大 1.32位地址空间 在一台32位系统上&#xff0c;虚拟地址空间为4GB&#xff0c;这个大小由系统上指针的可用数量决定。 对于一块32位的处理器&#xff0c;一个32位值可以表达2^32个不同的数值&#xff0c;如果你将每一个数值都指向不同的内存地址&#…

第01章-Java语言概述

目录 1 常见DOS命令 常用指令 相对路径与绝对路径 2 转义字符 3 安装JDK与配置环境变量 JDK与JRE JDK的版本 JDK的下载 JDK的安装 配置path环境变量 4 Java程序的编写与执行 5 Java注释 6 Java API文档 7 Java核心机制&#xff1a;JVM 1 常见DOS命令 DOS&#xff08;…

Linux系统编程—文件

一、文件编程概述 之前在windows中对文件的操作是&#xff1a;打开文档——>编辑文档——>保存文档——>关闭文档 我们的Linux文件编程主要是利用代码对文件进行操作&#xff1a;文件创建、打开、编辑等自动化执行等 在Linux我们要使用编程调用api函数的方式进行文…

python之Cp、Cpk、Pp、Ppk

目录 1、Cp、Cpk、Pp、Ppk 2、python计算 1、Cp、Cpk、Pp、Ppk Cp Process Capability Ratio 可被译为“过程能力指数” Cpk Process Capability K Ratio 可被译为“过程能力K指数” Pp Process Performance Ratio 可被译为“过程绩效指数” Ppk Process Performance K Ra…

Win10/Win11系统bitlocker正在等待激活如何解决?

有同学升级Win10系统后&#xff0c;发现C盘与D盘分区盘符中出现了黄色的锁定感叹号&#xff0c;还显示“bitlocker正在等待激活”&#xff0c;这可能是用户开启了bitlocker加密所导致的。下面就来看看解决的办法吧。 一、bitlocker正在等待激活的解决方法 打开控制面板-系统和安…

浅谈uniapp中开发安卓原生插件

其实官方文档介绍的比较清楚而且详细,但是有时候他太墨迹,你一下子找不到自己想要的,所以我总结了一下开发的提纲,也是为了自己方便下次使用。 1.第一步,下载官方提供的Android的示例工程,然后倒入UniPlugin-Hello-AS工程请在App离线SDK中查找,之后Android studio,编译运行项目…

C++11新特性之十六:std::tie

在c 11标准库中&#xff0c;加入了std::tie&#xff0c;在c 14中改进&#xff0c;方便使用。 其与std::tuple关系密切&#xff0c; 主要目的是方便地使用std::tuple。 std::tie函数的作用就是从元素引用中生成一个std::tuple元组&#xff0c;其在头文件<tuple>中定义&…

Git(二)版本控制、发展历史、初始化配置、别名

目录 一、版本控制1.1 为什么要使用版本控制&#xff1f;1.2 集中化的版本控制系统1.3 分布式的版本控制系统1.3 两种版本控制系统对比集中式&#xff08;svn&#xff09;分布式&#xff08;git&#xff09; 二、发展历史三、初始化配置3.1 配置文件3.2 配置内容 四、别名 一、…

基于卷积神经网络的乳腺癌分类 深度学习 医学图像 计算机竞赛

文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度&#xff0c;召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…

仅手机大小!极空间T2随身数据魔盒发布:既是NAS 又是U盘

今天极空间召开新品发布会&#xff0c;带来了极空间T2随身数据魔盒&#xff0c;售价1999元起。 极空间T2随身数据魔盒体积仅手机大小&#xff0c;充电宝可供电。既是个NAS&#xff0c;又是个U盘。 其具备双M.2插槽&#xff0c;可安装两块固态硬盘。4G内存支持docker&#xff0c…

Excel宏(VBA)自动化标准流程代码

自动化流程 我们对一个报表进行自动化改造会经历的固定流程&#xff0c;这里称为“流水线”&#xff0c;通常包含以下流程&#xff1a; 打开一个表格选择打开的表格选择表格中的Sheet选择Sheet中的单元格区域 &#xff08;有时候需要按条件筛选&#xff09;复制某个区域 粘贴…

互联网Java工程师面试题·Spring篇·第二弹

目录 3、Beans 3.1、什么是 spring bean&#xff1f; 3.2、spring 提供了哪些配置方式&#xff1f; 3.3、spring 支持集中 bean scope&#xff1f; 3.4、spring bean 容器的生命周期是什么样的&#xff1f; 3.5、什么是 spring 的内部 bean&#xff1f; 3.6、什么是 spri…

Linux下编译和安装ffmpeg

本文演示Centos下面如何编译和安装ffmpeg的过程&#xff0c; 一、ffmpeg的编译和安装 1、下载解压 wget http://www.ffmpeg.org/releases/ffmpeg-5.1.tar.gz tar -zxvf ffmpeg-5.1.tar.gz2、进入压缩目录&#xff0c;编译编译和安装 cd ffmpeg-5.1./configure --prefix/usr…

酷开科技 | 酷开系统,为居家生活打开更精彩的窗口

电视在我们的日常生活中扮演着重要的角色。虽然&#xff0c;作为客厅C位的扛把子——电视的娱乐作用深入人心&#xff0c;但是&#xff0c;它的涵义和影响力却因我们每个人的具体生活环境而存在着种种差异&#xff0c;而我们的生活环境又受到我们所处的社会及文化环境的影响。 …

哈希索引(PostgreSQL 14 Internals翻译版)

概览 哈希索引提供了根据特定索引键快速查找tuple ID (TID)的功能。粗略地说&#xff0c;它只是一个存储在磁盘上的哈希表。哈希索引唯一支持的操作是根据相等条件进行搜索。 当一个值插入到索引中时&#xff0c;将计算索引键的哈希函数。PostgreSQL哈希函数返回32位或64位整…

SSM - Springboot - MyBatis-Plus 全栈体系(三十六)

第八章 项目实战 四、后台功能开发 3. 头条模块开发 3.1 登陆验证和保护 3.1.1 需求描述 客户端在进入发布页前、发布新闻前、进入修改页前、修改前、删除新闻前先向服务端发送请求携带 token 请求头后端接收 token 请求头后&#xff0c;校验用户登录是否过期并做响应前端根…

Openssl数据安全传输平台009:加密理论基础:哈希/非对称加密RSA/对称加密AES

文章目录 0. 代码仓库代码编译时候可能出现的错误 1. 哈希1.1 哈希算法的种类:1.2 使用的头文件1.3 哈希算法API1.3.1 详解md5 API1.3.2 sha1/sha224/sha256/sha384/sha512常用API 1.5 sha1代码测试1.4 在VS中添加预处理器定义1.5 哈希算法C代码封装的思路 2. 非对称加密RSA2.1…

uniapp 单选框以及多选框样式更改

radio以及checkbox默认样式不符合自身需求时&#xff0c;根据自身需求更改样式&#xff0c;以下是自身的示例&#xff1a; 单选&#xff1a; 多选&#xff1a; 由于uniapp自身包含了一套默认的样式&#xff0c;所以如果不想全局更改只想在某个单据页面使用的话&#xff0c;就…