SpringCloud 微服务全栈体系(三)

这篇具有很好参考价值的文章主要介绍了SpringCloud 微服务全栈体系(三)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第五章 Nacos 注册中心

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

一、认识和安装 Nacos

1. 认识 Nacos

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

SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring

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
    SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring
  • windows 版本使用nacos-server-1.4.1.zip包即可。
2.1.2 解压
  • 将这个包解压到任意非中文目录下,如图:
    SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring

  • 目录说明:

    • bin:启动脚本
    • conf:配置文件
2.1.3.端口配置
  • Nacos 的默认端口是 8848,如果你电脑上的其它进程占用了 8848 端口,请先尝试关闭该进程。
  • 如果无法关闭占用 8848 端口的进程,也可以进入 nacos 的 conf 目录,修改配置文件中的端口:
    SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring
  • 修改其中的内容:
    SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring
2.1.4 启动
  • 启动非常简单,进入 bin 目录,结构如下:
    SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring

  • 然后执行命令即可:

    • windows 命令:
    startup.cmd -m standalone
    
  • 执行后的效果如图:
    SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring

2.1.5 访问
  • 在浏览器输入地址:http://127.0.0.1:8848/nacos 即可:
    SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring
  • 默认的账号和密码都是 nacos,进入后:
    SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring
2.2 Linux 安装
2.2.1 安装 JDK
  • Nacos 依赖于 JDK 运行,所以 Linux 上也需要安装 JDK 才行。

  • 上传 jdk 安装包:
    SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring

  • 上传到某个目录,例如:/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 上传安装包
  • 如图:
    SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring
  • 上传到 Linux 服务器的某个目录,例如/usr/local/src目录下:
    SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring
2.2.3 解压
  • 命令解压缩安装包:
tar -xvf nacos-server-1.4.1.tar.gz
  • 然后删除安装包:
rm -rf nacos-server-1.4.1.tar.gz
  • 目录中最终样式:
    SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring
  • 目录内部:
    SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring
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 管理页面,可以看到微服务信息:

SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring

三、服务分级存储模型

  • 一个服务可以有多个实例,例如我们的 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 是服务,一个服务可以包含多个集群,如杭州、上海,每个集群下可以有多个实例,形成分级模型,如图:

SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring

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

SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring

  • 杭州机房内的 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 控制台看到下面结果:
    SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring
  • 我们再次复制一个 user-service 启动配置,添加属性:
-Dserver.port=8083 -Dspring.cloud.nacos.discovery.cluster-name=SH
  • 配置如图所示:
    SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring
  • 启动 UserApplication3 后再次查看 nacos 控制台:
    SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring

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 的实例列表,点击编辑,即可修改权重:
    SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring

  • 在弹出的编辑窗口,修改权重:
    SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring

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

五、环境隔离

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

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

SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring

1. 创建 namespace

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

SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring

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

SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring

  • 然后,填写表单:

SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring

  • 就能在页面看到一个新的 namespace:
    SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring

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 后,访问控制台,可以看到下面的结果:

SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring
SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring

  • 此时访问 order-service,因为 namespace 不同,会导致找不到 userservice,控制台会报错:
    SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring

六、Nacos 与 Eureka 的区别

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

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

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

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

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

SpringCloud 微服务全栈体系(三),微服务全栈体系,spring cloud,微服务,spring

  • Nacos 与 eureka 的共同点

    • 都支持服务注册和服务拉取
    • 都支持服务提供者心跳方式做健康检测
  • Nacos 与 Eureka 的区别文章来源地址https://www.toymoban.com/news/detail-737010.html

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

到了这里,关于SpringCloud 微服务全栈体系(三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringCloud 微服务全栈体系(四)

    Nacos 除了可以做注册中心,同样可以做配置管理来使用。 当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。 Nacos 一方面可以将配置集中管理,另一方可

    2024年02月07日
    浏览(34)
  • SpringCloud 微服务全栈体系(二)

    假如我们的服务提供者 user-service 部署了多个实例,如图: 思考几个问题: order-service 在发起远程调用的时候,该如何得知 user-service 实例的 ip 地址和端口? 有多个 user-service 实例地址,order-service 调用时该如何选择? order-service 如何得知某个 user-service 实例是否依然健康,是

    2024年02月08日
    浏览(26)
  • SpringCloud 微服务全栈体系(一)

    随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢? 单体架构 :将业务的所有功能集中在一个项目中开发,打成一个包部署。 单体架构的优缺点如下: 优点: 架构简单 部署成本低

    2024年02月07日
    浏览(32)
  • SpringCloud 微服务全栈体系(七)

    微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。 在数百上千台服务中重复部署,环境不一定一致,会遇到各种问题 1. 应用部署的环境问题 大型项目组件较多,运行

    2024年02月07日
    浏览(35)
  • SpringCloud 微服务全栈体系(九)

    常见的镜像在 DockerHub 就能找到,但是我们自己写的项目就必须自己构建镜像了。 而要自定义镜像,就必须先了解镜像的结构才行。 1. 镜像结构 镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。 以 MySQL 为例,来看看镜像的组成结构: 简单来说,镜像

    2024年02月08日
    浏览(27)
  • 微服务SpringCloud教程——Spring Cloud是什么

    Spring Cloud 是一款基于 Spring Boot 实现的微服务框架。Spring Cloud 源自 Spring 社区,主要由 Pivotal 和 Netflix 两大公司提供技术迭代和维护。 随着微服务的火爆流行,国内外各大互联网公司都相继分享了他们在微服务架构中,针对不同场景出现的各种问题的解决方案和开源框架。

    2024年02月15日
    浏览(47)
  • 【springcloud 微服务】Spring Cloud 微服务网关Gateway使用详解

    目录 一、微服务网关简介 1.1 网关的作用 1.2 常用网关 1.2.1 传统网关 1.2.2 云原生网关

    2023年04月16日
    浏览(51)
  • SpringCloud 微服务系列——Spring Cloud Alibaba 微服务工具集

    ✅作者简介:2022年 博客新星 第八 。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:SpringCloud 微服务学习专栏 ✨特色专栏:国学周更-心性养成之路 🥭本文内容:SpringCloud 微服

    2024年02月04日
    浏览(50)
  • 【springcloud 微服务】Spring Cloud Alibaba Sentinel使用详解

    目录 一、前言 二、分布式系统遇到的问题 2.1 服务可用性问题 2.1.1  单点故障

    2024年01月16日
    浏览(48)
  • 【springcloud 微服务】Spring Cloud Alibaba Nacos使用详解

    目录 一、前言 二、nacos介绍 2.1  什么是 Nacos 2.2 nacos 核心能力 2.2.1 服务发现和服务健康监测

    2024年01月22日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包