Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2021升级版微服务教程3—Eureka完全使用指南

2021升级版微服务教程3—Eureka完全使用指南

原创
作者头像
鹿老师的Java笔记
修改于 2021-01-11 02:21:23
修改于 2021-01-11 02:21:23
1.6K0
举报

2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」

教程全目录「含视频」https://gitee.com/bingqilinpeishenme/Java-Wiki

Eureka服务注册和发现

本文要点: 什么是服务注册和发现 Eureka的使用 CAP Eureka集群搭建

什么是服务注册和发现

1593934895413
1593934895413
  • 治理中心
  • 服务注册
  • 服务发现
  • 心跳机制

以上都可以通过 Eureka 可以实现

Eureka基本使用

基本概念

Spring Cloud 封装了 Netflix 公司开发的 Eureka 组件来实现服务注册和发现。

image-20200420161934202
image-20200420161934202

在Eureka的架构中有两个角色:服务注册中心 Eureka Server服务客户端 Eureka Client

Eureka Server 作为服务注册功能的服务器,是服务注册中心。系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。

  • Eureka客户端 Eureka Client

EurekaClient是一个Java客户端,用于简化Eureka Server的交互

  • 在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)
  • Eureka Client会缓存服务注册表中的信息。这种方式有一定的优势首先可以降低Eureka Server的压力,其次当所有的Eureka Server宕机,服务调用方依然可以完成调用

Eureka注册中心搭建

  1. 在Project中创建module
image-20210109160624673
image-20210109160624673
  1. 导入依赖
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
 <!--        引入SpringCloud Eureka server的依赖-->
代码语言:txt
AI代码解释
复制
       <dependency>
代码语言:txt
AI代码解释
复制
           <groupId>org.springframework.cloud</groupId>
代码语言:txt
AI代码解释
复制
           <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
代码语言:txt
AI代码解释
复制
       </dependency>
代码语言:txt
AI代码解释
复制
   </dependencies>
代码语言:txt
复制
  1. 启动类上加注解
1593935968864
1593935968864
  1. 配置文件
代码语言:txt
复制

server:

代码语言:txt
AI代码解释
复制
 port: 8800

eureka:

代码语言:txt
AI代码解释
复制
 client:
代码语言:txt
AI代码解释
复制
   #    eureka.client. register-with-eureka:由于该应用为注册中心,所以设置为false,代表不向注册中心注册自己
代码语言:txt
AI代码解释
复制
   registerWithEureka: false
代码语言:txt
AI代码解释
复制
   #      不主动发现别人
代码语言:txt
AI代码解释
复制
   fetchRegistry: false
代码语言:txt
AI代码解释
复制
   #    声明注册中心的地址
代码语言:txt
AI代码解释
复制
   serviceUrl:
代码语言:txt
AI代码解释
复制
     defaultZone: http://localhost:8800/eureka/

#给当前应用起个服务名称 不能通过路径访问的 这个服务名称 在微服务中使用代表当前服务

spring:

代码语言:txt
AI代码解释
复制
 application:
代码语言:txt
AI代码解释
复制
   name: eureka-server
代码语言:txt
复制
  1. 启动注册中心 访问注册中心的监控页面 http://localhost:8800
image-20210109160155304
image-20210109160155304

客户端搭建—用户服务

以用户服务为例

  1. 创建项目
  2. 导入相关依赖
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
       <dependency>
代码语言:txt
AI代码解释
复制
           <groupId>org.springframework.cloud</groupId>
代码语言:txt
AI代码解释
复制
           <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
代码语言:txt
AI代码解释
复制
       </dependency>
代码语言:txt
复制
  1. 启动类上加注解
image-20200420165233554
image-20200420165233554
  1. 配置文件
代码语言:txt
复制

server:

代码语言:txt
AI代码解释
复制
 port: 8804

#指定当前服务的名称 这个名称会注册到注册中心

spring:

代码语言:txt
AI代码解释
复制
 application:
代码语言:txt
AI代码解释
复制
   name: cloud-user-8804

指定 服务注册中心的地址

eureka:

代码语言:txt
AI代码解释
复制
 client:
代码语言:txt
AI代码解释
复制
   serviceUrl:
代码语言:txt
AI代码解释
复制
     defaultZone: http://localhost:8800/eureka
代码语言:txt
复制

通过以上四步 就完成了一个 Eureka客户端的搭建 直接启动项目 通过Eureka的注册中心可以看到

image-20210109160221422
image-20210109160221422

按照上述步骤,将商品服务和订单服务改造为Eureka客户端。

Eureka进阶使用

CAP理论

目前,大型网站几乎都是分布式的,分布式系统的最大难点,就是各个节点的状态如何同步。CAP 定理是这方面的基本定理,也是理解分布式系统的起点。

1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标。

Consistency 一致性 Availability 可用性 Partition tolerance 分区容错性

它们的第一个字母分别是 C、A、P。

Eric Brewer 说,这三个指标不可能同时做到。这个结论就叫做 CAP 定理。

  • 分区容错性

大多数分布式系统都分布在多个子网络。每个子网络就叫做一个区(partition)。分区容错的意思是,区间通信可能失败。比如,一台服务器放在中国,另一台服务器放在美国,这就是两个区,它们之间可能无法通信。

Node1 和 Node2 是两台跨区的服务器。Node1 向 Node2 发送一条消息,Node2可能无法收到。系统设计的时候,必须考虑到这种情况。

一般来说,分区容错无法避免,因此可以认为 CAP 的 P 总是成立。CAP 定理告诉我们,剩下的 C 和 A 无法同时做到。

  • 数据一致性

由于系统问题,Node1 的数据不能即时同步给Node2,此时如果获取数据,会获取到不一致的数据,所有为了保证分布式系统对外的数据一致性,选择不返回任何数据【或者所有节点不响应任何请求】。

  • 可用性

要求系统内的节点在接受到请求的时候能够即时给出响应,具体来说就是:一方面需要在合理的时间内给出响应,另一方面即便是部分节点宕机,那么其他未宕机的节点也需要能够正常处理请求,即时返回的数据有问题。

一致性和可用性,为什么不可能同时成立?

答案很简单,因为可能通信失败(即出现分区容错),所以,对于分布式系统,我们只能能考虑当发生分区错误时,如何选择一致性和可用性。

需要强调的是:C 和 A 的抉择是发生在有分区问题的时候,正常情况下系统就应该有完美的数据一致性和可用性 例子: 比如,我们有个分布式系统,由三个节点 a、b、c 组成。其中节点 a 存放了 A 表的数据,b 存放了 B 表的数据,c 存放了 C 表的数据。 如果有一个业务,它的意图是想往 A 表插入一条新数据,在 B 表删除一条已有数据,在 C 表更新一条老数据,这个分布式系统该怎么处理这种业务? 技术上我们对这种一个意图想做多件事的情况往往会包装成一个事务。当我们包装成一个事务以后,我们可能会通过先在 a 节点执行,然后去 b 节点执行,最后去 c 节点执行,等到都成功了,才会返回成功。 但是,发生了分区以后怎么办?当在 a、b 节点都成功了,到 c 发现发生了通信故障? 此时,根据 CAP 定理,你有两个选择,要么就直接返回一个部分成功的结果给客户端,要么直接卡死等客户端超时或者返回失败给客户端。当返回部分成功的时候,这就是选择了可用性(A),当卡死或者返回失败给客户端的时候,就是选择了一致性(C)。

而根据一致性和可用性的选择不同,开源的分布式系统往往又被分为 CP 系统和 AP 系统。

  • 当一套系统在发生分区故障后,客户端的任何请求都被卡死或者超时,但是,系统的每个节点总是会返回一致的数据,则这套系统就是 CP 系统,经典的比如 Zookeeper。
  • 如果一套系统发生分区故障后,客户端依然可以访问系统,但是获取的数据有的是新的数据,有的还是老数据,那么这套系统就是 AP 系统,经典的比如 Eureka。

很多时候一致性和可用性并不是二选一的问题,大部分的时候,系统设计会尽可能的实现两点,在二者之间做出妥协,当强调一致性的时候,并不表示可用性是完全不可用的状态,比如,Zookeeper 只是在 master 出现问题的时候,才可能出现几十秒的不可用状态,而别的时候,都会以各种方式保证系统的可用性。而强调可用性的时候,也往往会采用一些技术手段,去保证数据最终是一致的。

自我保护机制

Eureka首页输出警告如图:

image-20210109160302395
image-20210109160302395

默认情况下,如果Eureka Server在一定时间内没有接受到服务实例的心跳,Eureka将会注销该实例(默认90秒).但是当网络分区发生故障时,微服务客户端和Eureka Server 无法正常通信。以上行为可能变得特别危险了,因为微服务本身是健康的,此时不能注销该服务实例。

Eureka通过自我保护机制来解决这个问题,当Eureka Server在短时间丢失过多的服务实例(可能发生了网络分区的故障),那么Eureka Server进入自我保护模式,一旦进入此模式,Eureka Server将会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不再注销任何的服务实例),当网络故障恢复后,Eureka Server会自动退出自我保护模式。

综上,自我保护模式是一种应对网络故障的安全保护措施,它的架构哲学是宁可同时保留所有的微服务,也不盲目注销任何健康的微服务,使用自我保护模式可以让Eureka,更加健壮,稳定。

一句话:大面积出现客户端失联的时候,Eureka 注册中心进入自我保护模式,不注销任何实例

自我保护机制的配置【了解】

在Eureka Server中配置关闭自我保护机制

代码语言:txt
AI代码解释
复制
#关闭自我保护机制  默认开启
eureka.server.enable-self-preservation=false

如果想及时剔除失效的eureka服务除了关闭自我保护机制外,可以调低eureka的心跳值

代码语言:txt
AI代码解释
复制
eureka-server服务端
配置文件中我们添加如下配置

#关闭保护机制,以确保注册中心将不可用的实例正确剔除
eureka.server.enable-self-preservation=false
#(代表是5秒,单位是毫秒,清理失效服务的间隔 )
eureka.server.eviction-interval-timer-in-ms=5000
代码语言:txt
AI代码解释
复制
客户端
配置文件中我们添加如下配置

# 心跳检测检测与续约时间
# 测试时将值设置设置小些,保证服务关闭后注册中心能及时踢出服务
# 配置说明
#  lease-renewal-interval-in-seconds 每间隔10s,向服务端发送一次心跳,证明自己依然”存活“
#  lease-expiration-duration-in-seconds  告诉服务端,如果我20s之内没有给你发心跳,就代表我“死”了,将我踢出掉。
eureka.instance.lease-renewal-interval-in-seconds=10
eureka.instance.lease-expiration-duration-in-seconds=20

Eureka集群搭建

注册中心集群,防止注册中心单机故障。

  1. 创建一个新的注册中心 eureka-server-8801
  2. 创建项目
代码语言:txt
AI代码解释
复制
  ![image-20210109160323741](https://gitee.com/bingqilinpeishenme/blogimg/raw/master/img/image-20210109160323741.png)
  1. 导入依赖
  2. 启动类加注解
  3. 写配置文件
代码语言:txt
AI代码解释
复制
  ![image-20210109160336831](https://gitee.com/bingqilinpeishenme/blogimg/raw/master/img/image-20210109160336831.png)
  1. 修改注册中心 Eureka-server-8800的配置文件
image-20210109160350052
image-20210109160350052
  1. 修改所有的客户端的配置,让客户端能够同时向两个注册中心注册
image-20210109160405439
image-20210109160405439
  1. 启动所有的客户端和注册中心 看看能不能正常注册

如果你觉得这篇内容对你挺有有帮助的话:

  1. 点赞支持下吧,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-)
  2. 欢迎在留言区与我分享你的想法,也欢迎你在留言区记录你的思考过程。
  3. 觉得不错的话,也可以关注 编程鹿 的个人公众号看更多文章和讲解视频(感谢大家的鼓励与支持🌹🌹🌹)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
2021升级版微服务教程3—Eureka完全使用指南
2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」
鹿老师的Java笔记
2021/02/01
6350
对于注册中心,ZooKeeper、Eureka 哪个更合适?
Eureka本身是Netflix开源的一款提供服务注册和发现的产品,并且提供了相应的Java封装。在它的实现中,节点之间相互平等,部分注册中心的节点挂掉也不会对集群造成影响,即使集群只剩一个节点存活,也可以正常提供发现服务。哪怕是所有的服务注册节点都挂了,Eureka Clients(客户端)上也会缓存服务调用的信息。这就保证了我们微服务之间的互相调用足够健壮。
芋道源码
2020/03/06
7800
Spring Cloud系列教程第九篇-Eureka自我保护机制
本文是由凯哥(凯哥Java:kagejava)发布的《spring cloud系列》教程的总第九篇:
凯哥Java
2020/07/04
1K0
Spring Cloud系列教程第九篇-Eureka自我保护机制
微服务之服务治理_Eureka
首先需要明确,不管是什么事物需要”治理“,那一定是该事物存在一定问题。比如环境治理。那么服务,或者说微服务为什么需要治理?对于服务来说,如果它承担的业务职责简单,那其实治理的必要性不大,因为服务运行过程是相对透明的,即使出现问题也能较快发现、定位、回滚。当服务承担的业务职责变多变大,那随着更多问题的到来,服务治理开始变得必要。服务治理也与技术架构本身息息相关。
炒香菇的书呆子
2023/10/09
3320
ZooKeeper、Eureka、Consul 、Nacos微服务注册中心对比
服务注册中心本质上是为了解耦服务提供者和服务消费者。对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的。更进一步,为了支持弹性扩缩容特性,一个微服务的提供者的数量和分布往往是动态变化的,也是无法预先确定的。因此,原本在单体应用阶段常用的静态LB机制就不再适用了,需要引入额外的组件来管理微服务提供者的注册与发现,而这个组件就是服务注册中心。
IT大咖说
2019/12/24
8.7K0
ZooKeeper、Eureka、Consul 、Nacos微服务注册中心对比
Eureka应用
Eureka是Netflix服务发现的服务端与客户端,Eureka提供服务注册以及服务发现的能力,当是Eureka Server时(注册中心),所有的客户端会向其注册,当是Eureka Client时,可以从注册中心获取对应的服务信息,或者是向Eureka Server将自己作为实例注册进去,每个Eureka不仅仅是一个服务端同时还是一个客户端。
后端码匠
2020/09/15
8170
F版本SpringCloud 5—Eureka集群和自我保护机制
上篇文章中,通过代码搭建了Eureka注册中心和客户端,是Eureka的简单应用,在本文中将会讲解更多关于Eureka服务端的应用以及原理。
鹿老师的Java笔记
2020/03/30
5850
【SpringCloud】三、Eureka
传统RPC远程调用框架中,服务之间依赖关系复杂,不便于管理。所以产生了服务治理,实现服务的注册与发现。
Yuyy
2022/06/28
3620
【SpringCloud】三、Eureka
微服务架构的服务与发现-Spring Cloud
简单来说,服务化的核心就是将传统的一站式应用根据业务拆分成一个一个的服务,而微服务在这个基础上要更彻底地去耦合(不再共享DB、KV,去掉重量级ESB),并且强调DevOps和快速演化。这就要求我们必须采用与一站式时代、泛SOA时代不同的技术栈,而Spring Cloud就是其中的佼佼者。
java思维导图
2018/07/26
4590
微服务架构的服务与发现-Spring Cloud
【Spring Cloud】004-Eureka服务注册与发现
Eureka是Netflix的一个子模块,也是核心模块之一。Eureka是基于REST的服务,用于定位服务,以实现云端中间件层服务发现和故障转移,服务注册与发现对于微服务来说是非常重要的,有了服务注册与发现,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件了,功能类似于Dubbo的注册中心,比如Zookeeper;
訾博ZiBo
2025/01/06
1360
【Spring Cloud】004-Eureka服务注册与发现
四个方面对比微服务注册中心产品
微服务注册中心本质上是为了解耦服务提供者和服务消费者。对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的。更进一步,为了支持弹性扩缩容特性,一个微服务的提供者的数量和分布往往是动态变化的,也是无法预先确定的。因此,原本在单体应用阶段常用的静态LB机制就不再适用了,需要引入额外的组件来管理微服务提供者的注册与发现,而这个组件就是服务注册中心。
二哥聊运营工具
2022/07/11
5160
四个方面对比微服务注册中心产品
ZooKeeper、Eureka、Consul 、Nacos,微服务注册中心怎么选?
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/05/27
9850
ZooKeeper、Eureka、Consul 、Nacos,微服务注册中心怎么选?
Spring-Cloud-Netflix-Eureka注册中心
Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现
JokerDJ
2023/11/27
2460
Spring-Cloud-Netflix-Eureka注册中心
精读此文后你会感觉之前对微服务核心模块-服务注册中心一无所知
在微服务架构中,帮助开发者快速构建应用的脚手架技术无疑是非常重要的。以Spring Boot为代表的基底技术在继承了Spring框架思想的同时将简洁便利、约定优于配置、开箱即用等特性进一步发扬光大。然而仅仅依靠Spring Boot还不足以支撑微服务架构应对服务高可用、服务动态配置、服务高可扩展、服务负载均衡、服务容错与隔离等非功能需求,我们还需要相关基础设施提供服务治理及管控能力。
愿天堂没有BUG
2022/10/28
5910
精读此文后你会感觉之前对微服务核心模块-服务注册中心一无所知
面试官:ZooKeeper、Eureka、Consul、Nacos各自的区别是什么?
服务注册中心本质上是为了解耦服务提供者和服务消费者。对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的。更进一步,为了支持弹性扩缩容特性,一个微服务的提供者的数量和分布往往是动态变化的,也是无法预先确定的。因此,原本在单体应用阶段常用的静态LB机制就不再适用了,需要引入额外的组件来管理微服务提供者的注册与发现,而这个组件就是服务注册中心。
业余草
2021/12/06
3.7K0
面试官:ZooKeeper、Eureka、Consul、Nacos各自的区别是什么?
深入了解Spring Cloud的服务注册与发现组件Eureka
摘要:Spring Cloud是一个基于Spring框架的开发工具包,可以帮助开发人员构建基于微服务架构的分布式系统。其中的核心组件之一是Eureka,它提供了一套强大的服务注册与发现功能。本文将深入介绍Spring Cloud中的Eureka组件,包括其背景、特性、工作原理以及与其他Spring Cloud组件的配合使用等方面,帮助读者更好地理解和使用Eureka。
知识浅谈
2023/07/24
2850
深入了解Spring Cloud的服务注册与发现组件Eureka
『互联网架构』软件架构-微服务介绍及Eureka服务注册与发现(91)
因此, Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像zookeeper那样使整个注册服务瘫痪。
IT架构圈
2019/07/08
5530
『互联网架构』软件架构-微服务介绍及Eureka服务注册与发现(91)
Eureka集群原理
高可用,试想你的注册中心只有一个only one,它出故障了那就呵呵o( ̄︶ ̄)o了,会导致整个微服务环境不可用。
全栈程序员站长
2022/09/03
7400
Eureka集群原理
微服务注册中心技术选型:5种主流注册中心,哪个最香?
对于注册中心,在写这篇文章前,我其实只对ETCD有比较深入的了解,但是对于Zookeeper和其它的注册中心了解甚少,甚至都没有考虑过ETCD和Zookeeper是否适合作为注册中心。
猫头虎
2024/04/08
3.8K0
微服务注册中心技术选型:5种主流注册中心,哪个最香?
微服务(三)——Eureka服务注册与发现&Eureka集群
Spring Cloud封装了Netflix 公司开发的Eureka模块来实现服务治理
不愿意做鱼的小鲸鱼
2022/09/26
8720
微服务(三)——Eureka服务注册与发现&Eureka集群
推荐阅读
相关推荐
2021升级版微服务教程3—Eureka完全使用指南
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档