文章目录
参考资料
Spring Cloud 官方官网:链接
Eureka 官方文档:Home · Netflix/eureka Wiki
视频资料:
SpringCloud 教程 已完结(IDEA 2022.1最新版)
【编程不良人】2021年最新SpringCloud微服务实战教程
一、服务注册中心
概念
服务注册中心就是在整个微服务架构中单独提出一个服务,这个服务无需完成系统的业务功能,仅仅用来对整个微服务系统的服务进行注册和发现,以及对服务健康状态的监控和管理。
作用
- 对配置的微服务中各服务的信息进行存储,如微服务的名称、IP和端口等
- 可在进行服务调用时通过服务发现查询可用的微服务列表及网络地址进行服务调用
- 对所有的微服务进行心跳检测,如发现某个服务实例长时间无法访问(90秒),就会从服务注册表移除该实例
常见服务注册中心组件有:
- eureka(netflix团队开发)
- zookeeper(java开发)
- consul(go开发)
- nacos(java开发)
二、Eureka 概述
Eureka 是一种 RESTful(代表性状态传输)服务,主要用于 AWS 云中,用于中间层服务器的发现、负载平衡和故障转移。它在 Netflix 中层基础设施中发挥着关键作用。
Eureka 包含两个组件:Eureka Server 和 Eureka Client
- Eureka Server 提供服务注册服务
各个微服务节点通过配置启动后,会在 EurekaServer 中进行注册,这样 Eureka Server 中的服务注册表中将会存储所有可用服务节点的信息,服务节点中的信息可在web页面看到
- Eureka Client 通过注册中心进行访问
通常是 Java 客户端,用于简化 Eruka Server的交互,客户端同时具备一个内置的、默认使用轮询(round-robin)算法的负载均衡器。
应用启动后,程序将会向 Eureka Server 发送心跳(默认为30秒)。若 Eureka Server 在多个心跳周期内没接收到某个节点的心跳,Eureka Server 将会从服务注册表中把这个服务节点移除(默认90秒)
注:eureka 2.0 已停止更新,而 Spring Cloud eureka 采用的大部分是 1.10.x的版本,最近一次更新时间在21年的12月。
三、Eureka 自我保护机制
官方文档:https://github.com/Netflix/eureka/wiki/Server-Self-Preservation-Mode
服务频繁启动时,Eureka Server Web页面会出现错误提示
默认情况下,若 Eureka Server 在 一定时间内(90秒)没接收到之前连接的某个微服务实例的心跳,则会移除该实例。当网络出现问题,微服务与 Eureka Server 之间无法通信,而 微服务本身正常运行,此时就不该移除实例,为了解决这类问题,Eureka 提供了自我保护机制
自我保护机制:服务端在运行期间会统计心跳失败比例在 15分钟内是否 低于85%,若低于85%,Eureka 服务端会将这些实例保护起来。我们可以在用 SpringBoot整合时,可通过配置来关闭这种保护机制
eureka.server.enbale-self-preservation=false # 关闭自我保护
eureka.server.eviction-interval-timer-in-ms=3000 # 超时3秒自动清除
eureka.instance.lease-expiration-duration-in-seconds=60 # 修改 eureka server 接收心跳的最长等待时间,默认为90秒
eureka.instance.lease-renewal-interval-in-seconds=20 # 指定客户端多久向 eureka server发送一次心跳,默认是30秒
四、Eureka 集群
这里由于我们是初学,暂时不深入了解其底层原理,先以实践为主。
五、Eureka 使用案例
Eureka 自动注册并发现微服,对服务状态、信息进行几种管理,这样我们可以通过 Eureka 来查询其他服务的信息。
基于上次案例:Spring Cloud 前导篇 | 传统 SpringBoot 项目的延展 | 图书借阅查询案例 | 拆分为多个服务进行部署与交互
5.1 创建 Eureka 服务端 服务
引入 Spring Cloud 前 我们要在 父项目 导入 spring cloud,之后的服务都是继承这个父项目的
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR12</version>
</dependency>
</dependencies>
<!-- 维护版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>