一. Eureka简介

Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。

1.Eureka组件

Eureka包含两个组件:Eureka Server和Eureka Client。

1.1 Eureka Server

Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样Eureka Server中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
  Eureka Server本身也是一个服务,默认情况下会自动注册到Eureka注册中心。
  如果搭建单机版的Eureka Server注册中心,则需要配置取消Eureka Server的自动注册逻辑。毕竟当前服务注册到当前服务代表的注册中心中是一个说不通的逻辑。
  Eureka Server通过Register、Get、Renew等接口提供服务的注册、发现和心跳检测等服务。

1.2 Eureka Client

Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。
  Eureka Client分为两个角色,分别是:Application Service(Service Provider)和Application Client(Service Consumer)

1.2.1 Application Service

服务提供方,是注册到Eureka Server中的服务。

1.2.2 Application Client

服务消费方,通过Eureka Server发现服务,并消费。

在这里,Application Service和Application Client不是绝对上的定义,因为Provider在提供服务的同时,也可以消费其他Provider提供的服务;Consumer在消费服务的同时,也可以提供对外服务。

2. Eureka Server架构原理简介

Register(服务注册):把自己的IP和端口注册给Eureka。
Renew(服务续约):发送心跳包,每30秒发送一次。告诉Eureka自己还活着。
Cancel(服务下线):当provider关闭时会向Eureka发送消息,把自己从服务列表中删除。防止consumer调用到不存在的服务。
Get Registry(获取服务注册列表):获取其他服务列表。 Replicate(集群中数据同步):eureka集群中的数据复制与同步。
Make Remote Call(远程调用):完成服务的远程调用。

Eureka Server
  Eureka Server既是一个注册中心,同时也是一个服务。那么搭建Eureka Server的方式和以往搭建Dubbo注册中心ZooKeeper的方式必然不同,那么首先搭建一个单机版的Eureka Server注册中心。

二. 搭建单机版Eureka Server

Eureka本身是使用Java来开发的,Spring Cloud使用Spring Boot技术对Eureka进行了封装,所以,在Spring Cloud中使用Eureka非常方便,只需要引入spring-cloud-starter-netlix-eureka-server这个依赖即可,然后就像启动一个普通的Spring Boot项目一样启动Eureka即可。

1. 创建项目

创建一个普通的Spring Boot项目,创建时,添加Eureka依赖:

2. 配置启动类

项目创建成功后,在启动类添加注解,标记该项目是一个Eureka Server:

@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {public static void main(String[] args) {SpringApplication.run(EurekaApplication.class, args);}}

@EnableEurekaServer注解表示开启Eureka的功能

3. 配置application.yml

server:port: 8761
spring:application:name: eureka## eureka settings
eureka:client:# 表示是否将自己注册到Eureka Server,默认值都是true。集群模式下可以改成trueregister-with-eureka: false# 表示是否从Eureka Server获取注册的服务信息,默认值都是true。集群模式下可以改成truefetch-registry: false

完成配置后就可以启动项目了。

三. 搭建集群版Eureka Server

注册中心作为微服务架构中的核心功能,其重要性不言而喻。所以单机版的Eureka Server在可靠性上并不符合现在的互联网开发环境。集群版的Eureka Server才是商业开发中的选择。

Eureka Server注册中心的集群和Dubbo的ZooKeeper注册中心集群在结构上有很大的不同。

ZooKeeper注册中心集群搭建后,集群中各节点呈现主从关系,集群中只有主节点对外提供服务的注册和发现功能,从节点相当于备份节点,只有主节点宕机时,从节点会选举出一个新的主节点,继续提供服务的注册和发现功能。

而Eureka Server注册中心集群中每个节点都是平等的,集群中的所有节点同时对外提供服务的发现和注册等功能。同时集群中每个Eureka Server节点又是一个微服务,也就是说,每个节点都可以在集群中的其他节点上注册当前服务。又因为每个节点都是注册中心,所以节点之间又可以相互注册当前节点中已注册的服务,并发现其他节点中已注册的服务。所以Eureka Server注册中心集群版在搭建过程中有很多的方式,找到一个最合适最可靠的搭建方式才能称为一个称职的程序员。
  
  集群版Eureka Server可以通过Spring Boot多环境配置方式快速搭建。只要创建一个合适的Eureka Server工程,通过多个全局配置即可完成快速搭建。

在集群搭建过程中,全局配置文件的定义非常重要。其中euraka.client.serviceUrl.defaultZone属性是用于配置集群中其他节点的。如果有多个节点,使用逗号’,'分隔。

有部分程序员只配置某一个集群节点信息,通过集群节点间的注册通讯实现节点的全面发现。这种配置形式是不推荐的。因为Eureka Server在服务管理上,会根据连带责任来维护服务列表,如果某集群节点宕机,那么通过这个节点注册过来的服务都会连带删除

1.修改hosts文件

搭建Eureka集群,首先我们需要一点准备工作,修改电脑的hosts文件:
(c:\windows\System32\drivers\etc\hosts):

127.0.0.1 eureka-a eureka-b

2. 新建yml文件

我们在resources目录下,再添加两个配置文件,分别为:application-a.yml 以及 application-b.yml:

application-a.yml 配置如下:

server:port: 8762
spring:application:name: eureka## eureka settings
eureka:instance:hostname: eurekaAclient:# 表示是否将自己注册到Eureka Server,默认值都是true。集群模式下可以改成trueregister-with-eureka: true# 表示是否从Eureka Server获取注册的服务信息,默认值都是true。集群模式下可以改成truefetch-registry: trueservice-url:# eurekaA服务注册到eurekaB服务上defaultZone: http://eurekaB:8763/eureka

application-b.yml 配置如下:

server:port: 8763
spring:application:name: eureka## eureka settings
eureka:instance:hostname: eurekaBclient:# 表示是否将自己注册到Eureka Server,默认值都是true。集群模式下可以改成trueregister-with-eureka: true# 表示是否从Eureka Server获取注册的服务信息,默认值都是true。集群模式下可以改成truefetch-registry: trueservice-url:# eurekaB服务注册到eurekaA服务上defaultZone: http://eurekaA:8762/eureka

配置完成后,对当前项目打成jar包:

打包完成后,在命令行分别启动两个Eureka实例,命令如下:

java -jar eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=a
java -jar eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=b

到此,Eureka集群就配置完成了。

四. Eureka 工作细节

Eureka 本身可以分为两大部分,Eureka Server 和 Eureka Client
5.3.1 Eureka Server
Eureka Server 主要对外提供了三个功能:

  1. 服务注册,所有的服务都注册到 Eureka Server 上面来
  2. 提供注册表,注册表就是所有注册上来服务的一个列表,Eureka Client 在调用服务时,需要获取这个注册表,一般来说,这个注册表会缓存下来,如果缓存失效,则直接获取最新的注册表
  3. 同步状态,Eureka Client 通过注册、心跳等机制,和 Eureka Server 同步当前客户端的状态

1. Eureka Client

Eureka Client 主要是用来简化每一个服务和 Eureka Server 之间的交互。Eureka Client 会自动拉取、更新以及缓存 Eureka Server 中的信息,这样,即使 Eureka Server 所有节点都宕机,Eureka Client 依然能够获取到想要调用服务的地址(但是地址可能不准确)。

2. 服务注册

服务提供者将自己注册到服务注册中心(Eureka Server),需要注意,所谓的服务提供者,只是一个业务上上的划分,本质上他就是一个 Eureka Client。当 Eureka Client 向 Eureka Server 注册时,他需要提供自身的一些元数据信息,例如 IP 地址、端口、名称、运行状态等等。

3. 服务续约

Eureka Client 注册到 Eureka Server 上之后,事情没有结束,刚刚开始而已。注册成功后,默认情况下,Eureka CLient 每隔 30 秒就要向 Eureka Server 发送一条心跳消息,来告诉 Eureka Server 我还在运行。如果 Eureka Server 连续 90 秒都有没有收到 Eureka Client 的续约消息(连续三次没发送),它会认为 Eureka Client 已经掉线了,会将掉线的 Eureka Client 从当前的服务注册列表中剔除。

服务续约,有两个相关的属性(一般不建议修改):

eureka.instance.lease-renewal-interval-in-seconds=30
eureka.instance.lease-expiration-duration-in-seconds=90
  • eureka.instance.lease-renewal-interval-in-seconds 表示服务的续约时间,默认是 30 秒
  • eureka.instance.lease-expiration-duration-in-seconds 服务失效时间,默认是 90 秒

4. 服务下线

当 Eureka Client 下线时,它会主动发送一条消息,告诉 Eureka Server ,我下线啦。

5. 获取注册表信息

Eureka Client 从 Eureka Server 上获取服务的注册信息,并将其缓存在本地。本地客户端,在需要调用远程服务时,会从该信息中查找远程服务所对应的 IP 地址、端口等信息。Eureka Client 上缓存的服务注册信息会定期更新(30 秒),如果 Eureka Server 返回的注册表信息与本地缓存的注册表信息不同的话,Eureka Client 会自动处理。
这里,也涉及到两个属性,一个是是否允许获取注册表信息:

eureka.client.fetch-registry=true

Eureka Client 上缓存的服务注册信息,定期更新的时间间隔,默认 30 秒:

eureka.client.registry-fetch-interval-seconds=30

SpringCloud--Eureka 注册中心原理及其搭建相关推荐

  1. SpringCloud——Eureka注册中心搭建

    Eureka原理 eureka来源于古希腊词汇,意为"发现了" eureka分为两部分,Server端和Client端 Register 服务注册 想要参与服务注册发现的实例首先需 ...

  2. spring cloud搭建_Spring Cloud Eureka 注册中心集群搭建,Greenwich 最新版!

    Spring Cloud 的注册中心可以由 Eureka.Consul.Zookeeper.ETCD 等来实现,这里推荐使用 Spring Cloud Eureka 来实现注册中心,它基于 Netfl ...

  3. SpringCloud Eureka注册中心日志输出问题:Running the evict task with compensationTime 0ms

    动Eureka注册中心后,控制台一直输出 - [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict ...

  4. 微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关

    微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关 1. 微服务简介 1.1 服务架构演变 1.2 SpringCloud ...

  5. springcloud服务注册中心eureka搭建

    pom.xml依赖: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  6. SpringCloud 如何搭建Eureka注册中心

    导语   在之前的分享中介绍了SpringCloud相关的内容,那么如何去搭建一个Spring Cloud Eureka 的注册中心.作为微服务中最为重要的一个组件,怎么去搭建一个服务注册中心称为关键 ...

  7. spring-cloud开发微服务笔记(二):高可用Eureka注册中心的搭建与RestTemplate和Fengin客户端调用微服务示例

    引言:这一篇博客是将上一篇spring-cloud-eureka-server的单机模式改为集群模式,体现eureka的高可用特性.生产环境无论是Eureka注册中心还是Client客户端大多是部署在 ...

  8. 搭建eureka注册中心

    有没有问题? 简单回顾一下,刚才我们写了什么: service-provider:一个提供根据id查询用户的微服务. service-consumer:一个服务调用者,通过RestTemplate远程 ...

  9. SpringCloud注册中心高可用搭建

    转载自 SpringCloud注册中心高可用搭建 Spring Cloud的注册中心可以由Eureka.Consul.Zookeeper.ETCD等来实现,这里推荐使用Spring Cloud Eur ...

最新文章

  1. 性能提升19倍,DGL重大更新支持亿级规模图神经网络训练
  2. 第三次学JAVA再学不好就吃翔(part15)--基础语法之控制跳转语句
  3. linux nohup /dev/null,nohup结合/dev/null
  4. flask学习笔记--蓝图
  5. math.sqrt_Math.SQRT1_2属性与JavaScript中的示例
  6. java 标记_Java中的标记语句块?
  7. SpringBoot2.0 基础案例(16):配置Actuator组件,实现系统监控
  8. 缓冲区 | 没吃透Netty 缓冲区,还能算得上Java老司机?
  9. Cookie、Session、Token、JWT分别是什么(二)
  10. java 单链表是否有环,判断链表中是否有环
  11. Mac删除Windows10后空间丢失解决
  12. 83. 验证码(1)
  13. 保存Google、Bing翻译的语音
  14. vb mysql 实例教程_在VB.NET应用中使用MySQL的方法
  15. 《老罗Android开发视频教程》老罗来交国庆的答卷了
  16. selenium官网下载地址
  17. 软考网络工程师协议和名称---必看
  18. 2021山东省莱阳市高考成绩查询,2021年莱阳市高考状元名单资料,今年莱阳市高考状元多少分...
  19. 我爱Java系列---【分页查询】
  20. 讲故事投资 天使投资人的中国式生存

热门文章

  1. Ruby语法解释:attr_reader,attr_writer和attr_accessor
  2. HTML用户登录页面里面login.js代码
  3. HDU2187 老人是真饿了【贪心】
  4. JSK-16501 扫雷游戏【谜题】
  5. 趣味程序之数学之美系列
  6. 【数论】—— 整数质因子分解
  7. 测试 —— 与开发双手互搏的艺术
  8. Matlab Tricks(十二)—— 矩阵阈值化的实现
  9. C语言的图形函数库贴吧,自己写的一个图形库,有点问题.来请教大家了
  10. 鼠标双击检测_雷蛇巴塞利斯蛇无线游戏鼠标评测:青出于蓝胜于蓝