SpringCloud学习笔记(二)Eureka、Ribbon和Nacos
创始人
2025-05-31 11:42:13

一、服务调用关系

  • 服务提供者:暴露接口给其他微服务调用
  • 服务消费者:调用其他微服务提供的接口
  • 提供者与消费者角色其实是相对的
  • 一个服务可以同时是服务提供者和服务消费者

二、Eureka注册中心

1、通过Eureka的一次远程服务调用的过程

  • 服务提供者注册服务信息(通常所有微服务都要注册,包括Eureka自己),每个微服务的服务器需要向注册中心进行心跳续约,没30秒1次
  • 服务消费者拉取服务提供者的消息
  • 负载均衡调用服务提供者的服务器
  • 服务消费者远程调用服务提供者的微服务

2、Eureka的作用

  • 消费者该如何获取服务提供者具体信息?
    • 服务提供者启动时向Eureka注册自己的信息
    • Eureka保存这些信息
    • 消费者根据服务名称向eureka拉取提供者信息
  • 如果有多个服务提供者,消费者该如何选择?
    • 服务消费者利用负载均衡算法,从服务列表中挑选一个
  • 消费者如何感知服务提供者健康状态?
    • 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
    • Eureka会更新记录服务列表信息,心跳不正常会被剔除
    • 消费者就可以拉取到最新的信息

3、在Eureka架构中,微服务角色有两类:

  • EurekaServer:服务端,注册中心
    • 记录服务信息
    • 心跳监控
  • EurekaClient:客户端
    • Provider:服务提供者
      • 注册自己的信息到EurekaServer
      • 每隔30秒向EurekaServer发送心跳
    • Consumer:服务消费者
      • 根据服务名称从EurekaServer拉取服务列表
      • 基于服务列表做负载均衡,选择一个微服务后发起远程调用

三、搭建EurekaServer服务

1、搭建EurekaServer服务步骤:

  • 创建eurea-server项目,引入依赖

org.springframework.cloudspring-cloud-starter-netflix-eureka-server

  • 编写启动类,添加@EnableEurekaServer注解
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {public static void main(String[] args) {SpringApplication.run(EurekaApplication.class, args);}
}
  • 添加application.yml文件,编写以下配置
server:port: 10086 # 服务端口
spring:application:name: eurekaserver # eureka的服务名称
eureka:client:
#    register-with-eureka: true     #false表示不向注册中心注册自己。
#    fetch-registry: true     #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务service-url:  # eureka的地址信息defaultZone: http://127.0.0.1:10086/eureka

2、模拟多实例部署

  • 在Service窗口对需要多实例的应用右键点击复制配置
  • 修改名字,并在VM选项中输入-Dserver.port=8082(随便填写一个端口号)

3、服务注册

  • 引入eureka-client依赖
org.springframework.cloudspring-cloud-starter-netflix-eureka-client

  • 在application.yml中配置eureka地址
eureka:client:service-url:  # eureka的地址信息defaultZone: http://127.0.0.1:10086/eureka

4、服务消费者完成服务拉取

  • 修改服务消费者的代码,修改访问的url路径,用服务名代替ip、端口
String url = "http://userservice/user/" + order.getUserId();
  • 在服务消费者项目的启动类中的RestTemplate添加负载均衡注解
@Bean
@LoadBalanced   //表示被Ribbon拦截,并进行负载均衡处理
public RestTemplate restTemplate() {return new RestTemplate();
}

四、Ribbon负载均衡流程

在这里插入图片描述

在这里插入图片描述

五、负载均衡策略

1、Ribbon的负载均衡规则是一个叫做IRule的接口来定义的,每一个子接口都是一种规则;默认规则是ZoneAvoidanceRule,即在一个Zone内进行轮询访问

在这里插入图片描述
2、通过定义IRule实现可以修改负载均衡规则

  • 添加代码方式,在服务消费者的启动类中定义一个新的IRule
  • 好处是配置灵活,可以全局配置,但修改时需要重新打包发布
@Bean
public IRule randomRule() {return new RandomRule();
}
  • 配置文件方式,在服务消费者的application.yml文件中添加新的配置
  • 好处是直观,方便,无须重新打包发布,但无法做到全局配置,只能指定微服务实现
userservice:	#这里是服务提供者的名称ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule  # 负载均衡规则,随机访问

六、饥饿加载

  • Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长
  • 而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载
ribbon:eager-load:enabled: true # 开启饥饿加载clients: # 指定饥饿加载的服务名称,如果只有一个微服务,也可以直接写在上面- userservice # 如果写在下面,则要加个-,后续如果要添加其他微服务,继续加即可

七、Nacos注册中心

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

2、将微服务注册到Nacos

  • 在所有微服务的父工程中添加spring-cloud-alilibaba的管理依赖
com.alibaba.cloudspring-cloud-alibaba-dependencies2.2.5.RELEASEpomimport

  • 添加nacos的客户端依赖
com.alibaba.cloudspring-cloud-starter-alibaba-nacos-discovery

  • 修改所有微服务的application.yml文件,添加nacos地址
spring:cloud:nacos:server-addr: nacos:8849 # nacos服务地址
  • 在下载好的nacos中bin文件夹的地址栏上,输入cmd进入当前目录下的cmd窗口,输入startup.cmd -m standalone启动nacos服务,在浏览器中输入http://169.254.219.198:8849/nacos/index.html进入nacos管理界面

八、Nacos服务分级存储模型

  • 将微服务以特征划分集群,比如在杭州、北京的服务器各自划分一个集群;服务调用尽可能选择本地集群的服务,跨集群调用延迟较高;本地集群不可访问时,再去访问其他集群
  • 一级是服务,例如userservice
  • 二级是集群,例如杭州或上海
  • 三级是实例,例如杭州机房的某台部署了userservice的服务器

2、设置服务集群属性:修改application.yml文件

spring:cloud:nacos:server-addr: nacos:8849 # nacos服务地址discovery:cluster-name: HZ  #配置集群名称,HZ代码杭州

九、NacosRule负载均衡策略

  • NacoosRule会优先选择同集群服务实例列表,如果本地集群找不到,才会去其他集群寻找,并且会报警告,当确定了可用实例列表后,再采用随机负载均衡挑选实例
  • 配置策略:修改微服务的application.yml配置文件,和Eureka的负载均衡策略一样
userservice:ribbon:NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule  # 负载均衡规则,在集群内部采用随机访问,如果本地没有,则会进行跨集群访问
  • 根据权重负载均衡:Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高
    • 在Nacos控制台中可以设置实例的权重值,0~1之间
    • 当权重设置为0时则该实例完全不会被访问

十、环境隔离

  • Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,用来做最外层隔离
  • 在Nacos控制台中可以创建namespace,用来隔离不同环境
  • 将生成的namespace的ID添加到实例的application.yml文件中即可完成隔离
  • 不同namespace下的实例无法相互访问
spring:cloud:nacos:server-addr: nacos:8849 # nacos服务地址discovery:cluster-name: HZ #集群名称namespace: 014035c1-8176-4b5e-9423-0e85c6d2cd41 # dev环境,即命名空间的IDephemeral: false # 是否是临时实例

十一、Nacos与Eureka的比较

1、共同点:

  • 都支持服务注册和服务拉取
  • 都支持服务提供者心跳方式做健康检测

2、不同点

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

3、修改非临时实例的方法,即修改实例的application.yml文件

spring:cloud:nacos:server-addr: nacos:8849 # nacos服务地址discovery:ephemeral: false # 是否是临时实例,默认是true

相关内容

热门资讯

STM32之TIM编码器接口   编码器简介:   例子讲解:正交编码器有两个输出,一...
C++友元函数和友元类 在 C++ 中,一个类中可以有 public、protected、pr...
【UIScrollView实现... 一、我们先来说一下,上节课讲的是啥,都忘了上节课讲的是啥了吗, 1.上节课我们讲的是“猜图游戏”吧,...
m8002是什么,m8002是... m8002是什么目录m8002是什么m8002是什么指令Intel 酷睿i7 2620M是什么意思m...
新式取暖省电设备有哪些,最省电... 新式取暖省电设备有哪些目录新式取暖省电设备有哪些最省电的取暖设备有哪些家用什么电器取暖省电家用取暖器...
腾讯旗下的软件有哪些,腾讯旗下... 腾讯旗下的软件有哪些目录腾讯旗下的软件有哪些腾讯旗下的软件腾讯的应用有哪些腾讯旗下的所以软件有哪些?...
柏字在名字里怎么读, 极速百科... 柏字在名字里怎么读目录柏字在名字里怎么读
MySQL高可用配置与MHA集... MySQL高可用配置与MHA集群一、MHA概述1、什么是MHA2、MHA 的组成3、MHA 的特点二...
我们为什么不能忽视业务只讲数据... 数据治理是一项重要的业务实践,可以帮助组织更好地管理和利用数据。然而,一...
rabbitMQ介绍及使用方法 目录 一、MQ概述 二、RabbitMQ简介 三、RabbitMQ的五种工作模式 1、简单模式 2、...
OPNET Modeler 软... 文章目录一、项目编辑器二、节点模型编辑器三、进程模型编辑器四、链路模型编辑器五、包格式编辑器六、天线...
西湖的诗句古诗,描写西湖美景的... 西湖的诗句古诗目录西湖的诗句古诗描写西湖美景的古诗有关西湖的古诗咏西湖的古诗词西湖的诗句古诗 ...
独立显卡2g内存是什么意思,什... 独立显卡2g内存是什么意思目录独立显卡2g内存是什么意思什么是2g独立显卡独立显卡2G是个什么概念?...
女生不同手指戴戒指的含义,各个... 女生不同手指戴戒指的含义目录女生不同手指戴戒指的含义各个手指戴戒指代表什么女生各指头戴戒指分别表示什...
心有阳光下一句是什么 极速百科... 心有阳光下一句是什么目录心有阳光下一句是什么心有阳光下一句是什么“微笑向暖,安之若素,你若盛开,清风...
React从入门到入土系列1-... 这是我自己系统整理的React系列博客,主要参考2023年3开放的最新版本react官...
WEB前端打印使用记录 一、window.print(); 1、使用记录 printTable(){//获取body页面内...
长城酷熊二手车如何(长城酷熊二... 本篇文章极速百科给大家谈谈长城酷熊二手车如何,以及长城酷熊二手车如何选对应的知识点,希望对各位有所帮...
南京亿家联盟是做什么的,现在有... 南京亿家联盟是做什么的目录南京亿家联盟是做什么的现在有人让我做微商,亿家大联盟,好像是保健品,益生菌...
下五洋捉鳖是什么意思,“上九天... 下五洋捉鳖是什么意思目录下五洋捉鳖是什么意思“上九天揽月,下五洋捉鳖”是什么意思?神十上九月揽天,蛟...
会计十三栏明细账的登记方法,三... 会计十三栏明细账的登记方法目录会计十三栏明细账的登记方法三栏账明细账怎么填急十三栏明细账怎样登十三栏...
SpringBoot实战(十二... 目录一、简介二、Maven依赖三、使用入门1.HTTP 方式访问端点2.JMX 方式访问端点3.端点...
亚洲4大邪术都有什么,亚洲四大... 亚洲4大邪术都有什么目录亚洲4大邪术都有什么亚洲四大邪术是哪四个?亚洲四大邪术,哪个邪术最恐怖亚洲四...
手机软件闪退怎么办,手机软件闪... 3. 更新应用:有时应用本身的漏洞或bug可能导致闪退。你可以检查应用是否有新版本,如果有,尝试更新...
一般般还行是什么意思 极速百科... 一般般还行是什么意思目录一般般还行是什么意思一般般还行是什么意思长的还行,不错,一般般,是什么意思?...
六级多少分过线,六级考试多少分... 六级多少分过线目录六级多少分过线六级考试多少分算过关大学英语六级多少分过啊全国英语六级考试多少分算过...
jmeter公共数据维护 为什么要进行公共数据维护?数据维护的方法是?一、用户自定义变量添加一个用...
Docker容器安装Mysql... mysql 5.7 docker容器中mysql数据库的启动,登录,服务访问 1.检...
三十六、实战演练之接口自动化平... 一、 测试步骤创建 接口名称: /test_steps/ 请求方式: ...
聊城大学信息功能材料与器件团队... 聊城大学信息功能材料与器件团队在电介质陶瓷领域取得系列进展近期, 聊城大学材料科学与工...