SpringCloud 微服务全栈体系(三)

第五章 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:8848discovery: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:8848discovery: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:8848discovery:cluster-name: HZnamespace: 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.rhkb.cn/news/168674.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【面试经典150 | 哈希表】快乐数

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;哈希集合判重方法二&#xff1a;快慢指针判重 其他语言python3 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为…

第二证券:风电概念强势拉升,威力传动“20cm”涨停,双一科技等大涨

风电概念20日盘中强势拉升&#xff0c;到发稿&#xff0c;威力传动“20cm”涨停&#xff0c;双一科技涨超17%&#xff0c;顺发恒业亦涨停&#xff0c;金雷股份、大金重工涨约7%&#xff0c;新强联、海力风电涨超5%。 音讯面上&#xff0c;9月以来江苏、广东海风项目加快推动&a…

第十五章 I/O(输入/输出)流

15.1 输入/输出流 流是一组有序的数据序列&#xff0c;可分为输入流和输出流两种。 程序从指向源的输入流中读取源中数据&#xff0c;源可以是文件、网络、压缩包或者其他数据源 输出流的指向是数据要到达的目的地&#xff0c;输出流的目标可以是文件、网络、压缩包、控制台和…

机器学习笔记 - 特斯拉的占用网络简述

一、简述 ​ 2022 年,特斯拉宣布即将在其车辆中发布全新算法。该算法被称为occupancy networks,它应该是对Tesla 的HydraNet 的改进。 自动驾驶汽车行业在技术上分为两类:基于视觉的系统和基于激光雷达的系统。后者使用激光传感器来确定物体的存在和距离,而视觉系统…

【tg】6: MediaManager的主要功能

【tg】2:视频采集的输入和输出 的管理者是 media manager‘ media 需要 network的支持:NetworkInterface friend class MediaManager::NetworkInterfaceImpl;NetworkInterfaceImpl 直接持有 MediaManager 的指针即可:发送rtp包、rtcp包、设置socket选项?

小程序 swiper滑动

整个红色区域为可滑动区域&#xff0c;数字1区域为展示区域&#xff0c;数字2为下一个展示模块 <scroll-view class"h_scroll_horizontal" enhanced"ture" bind:touchend"touchEnd" bind:touchstart"touchStart"><view clas…

从昏暗到明亮—改善照明环境,提升编程效率

作为一名程序员博主&#xff0c;长时间写代码、写博客&#xff0c;对着电脑屏幕的生活方式已经渐渐成为了我的日常。 然而&#xff0c;这种生活方式却给我的眼睛带来了相当大的压力。每当一天的工作结束&#xff0c;我的眼睛总是感到干涩、疲劳&#xff0c;让我感到不舒适。&am…

基于C语言 --- 自己写一个通讯录

C语言程序设计笔记---039 C语言之实现通讯录1、介绍C/C程序的内存开辟2、C语言实现通讯录2.1、ContactMain.c程序大纲2.2、Contact2.h2.3、Contact2.c2.3.1 InitContact( )初始化通讯录函数2.3.2 AddContact( )添加联系人和CheckCapaticy( )检查容量函数2.3.3、ShowContact( )显…

模式识别——高斯分类器

模式识别——高斯分类器 需知定义特殊情况&#xff08;方差一致&#xff09;Sigmoid 需知 所有问题定义在分类问题下&#xff0c;基于贝叶斯决策 定义 条件概率为多元高斯分布&#xff0c;此时观测为向量 X X 1 , X 2 , . . . , X n X{X_1,X_2,...,X_n} XX1​,X2​,...,Xn​…

Docker Service 创建

Docker Swarm Mode Docker Swarm 集群搭建 Docker Swarm 节点维护 Docker Service 创建 service 只能依附于 docker swarm 集群&#xff0c;所以 service 的创建前提是&#xff0c;swarm 集群搭建完毕。 1. 创建 service docker service create 命令用于创建 service&#xff…

【C++项目】高并发内存池第二讲中心缓存CentralCache框架+核心实现

CentralCache 1.框架介绍2.核心功能3.核心函数实现介绍3.1SpanSpanList介绍3.2CentralCache.h3.3CentralCache.cpp3.4TreadCache申请内存函数介绍3.5慢反馈算法 1.框架介绍 回顾一下ThreadCache的设计&#xff1a; 如图所示&#xff0c;ThreadCache设计是一个哈希桶结构&…

前端领域的插件式设计

插件&#xff0c;是一个常见的概念。 例如&#xff0c;当我们需要把我们前端代码中的 css 样式提取打包&#xff0c;我们可以用 webpack 的 mini-css-extract-plugin&#xff0c;或者你如果用 rollup 的话&#xff0c;可以选择 rollup-plugin-postcss。 再比如我们可以给 bab…

RDB.js:适用于 Node.js 和 Typescript 的终极对象关系映射器

RDB.js 是适用于 Node.js 和 Typescript 的终极对象关系映射器&#xff0c;可与 Postgres、MS SQL、MySQL、Sybase SAP 和 SQLite 等流行数据库无缝集成。无论您是使用 TypeScript 还是 JavaScript&#xff08;包括 CommonJS 和 ECMAScript&#xff09;构建应用程序&#xff0c…

X32位汇编和X64位区别无参函数分析(一)

前言 一、X32汇编函数无参无返回分析 二、X64汇编函数无参无返回分析 总结 前言 提示&#xff1a;以下是个人学习总结&#xff1a;如有错误请大神指出来&#xff0c;只供学习参考&#xff0c;本内容使用使用VS2017开发工具&#xff1a;语言是C&#xff0c;需要一些常见的汇编指…

MySQL1——喵喵期末不挂科

宝宝&#xff0c;你不点个赞吗&#xff1f;不评个论吗&#xff1f;不收个藏吗&#xff1f; 最后的最后&#xff0c;关注我&#xff0c;关注我&#xff0c;关注我&#xff0c;你会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的很重要…

阶段六-Day04-MyBatis2

一、别名 Alias 1. 为什么使用别名 一般映射文件中会包含大量<select>标签, 每个<select>中都需要配置resultType"com.bjsxt.pojo.People"&#xff0c;MyBatis提供了别名机制可以对某个类起别名或给某个包下所有类起别名&#xff0c;简化resultType取值…

sklearn-6算法链与管道

思想类似于pipeline&#xff0c;将多个处理步骤连接起来。 看个例子&#xff0c;如果用MinMaxScaler和训练模型&#xff0c;需要反复执行fit和tranform方法&#xff0c;很繁琐&#xff0c;然后还要网格搜索&#xff0c;交叉验证 1 预处理进行参数选择 对于放缩的数据&#x…

性能测试 —— Jmeter 命令行详细

我们在启动Jmeter时 会看见&#xff1a;Don’t use GUI mode for load testing !, only for Test creation and Test debugging.For load testing, use CLI Mode (was NON GUI) 这句话的意思就是说&#xff0c;不要使用gui模式进行负载测试&#xff0c;gui模式仅仅是创建脚本…

Unity 通过jar包形式接入讯飞星火SDK

最近工作上遇到了要接入gpt相关内容的需求&#xff0c;简单实现了一个安卓端接入讯飞星火的UnitySDK。 或者也可以接入WebSocket接口的。本文只讲安卓实现 我使用的Unity版本为2021.3.27f1c2 Android版本为4.2.2 1.下载SDK 登陆讯飞开放平台下载如图所示SDK 2.新建安卓工程…

【广州华锐互动】关于物理力学的3D实验实操平台

在科学的广阔领域中&#xff0c;物理力学是一个至关重要的分支&#xff0c;它探索了物体在力作用下的运动规律。然而&#xff0c;传统的物理实验往往需要复杂的设备和大量的操作&#xff0c;这对于学生来说是一项巨大的挑战。为了解决这个问题&#xff0c;广州华锐互动开发了物…