Eureka 服务注册与发现

101 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情

1 Eureka 单节点搭建

1.1 pom

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

1.2 application.yml

eureka: 
  client:
    #是否将自己注册到Eureka Server,默认为true,由于当前就是server,故而设置成false,表明该服务不会向eureka注册自己的信息
    register-with-eureka: false
    #是否从eureka server获取注册信息,由于单节点,不需要同步其他节点数据,用false
    fetch-registry: false
    #设置服务注册中心的URL,用于client和server端交流
    service-url:                      
      defaultZone: http://localhost:7900/eureka/

1.3 application.properties

#是否将自己注册到Eureka Server,默认为true,由于当前就是server,故而设置成false,表明该服务不会向eureka注册自己的信息
eureka.client.register-with-eureka=false
#是否从eureka server获取注册信息,由于单节点,不需要同步其他节点数据,用false
eureka.client.fetch-registry=false
#设置服务注册中心的URL,用于client和server端交流
eureka.client.service-url.defaultZone=http://localhost:7900/eureka/

1.4 启动类上添加此注解标识

@EnableEurekaServer

2 整体介绍

服务注册与发现包括两部分,一个是服务器端,另一个是客户端。

2.1 客户端功能

  1. 注册:每个微服务启动时会将自己的网络地址等信息注册到注册中心,这些信息将被存储在内存中。
  2. 获取服务注册表:消费者从注册中心中可以取到所有注册的服务地址等信息,再调用服务的时候,会使用这个地址。他并不是每次都去注册中心查询,而是定期缓存注册表信息到客户端本地。
  3. 心跳:每个微服务为了证明自己可用,定期会向服务端发送心跳通信,若长时间没有和服务器通信,则将被注销。
  4. 调用:通过注册表进行服务调用,解析服务名和地址的关系,找到自己想要的服务进行调用。

2.2 server注册中心功能

  1. 服务注册表:注册中心会记录各个微服务的服务名称,IP,端口等信息。
  2. 服务注册与发现:将微服务信息注册到注册中心,可以被客户端发现并调用。
  3. 服务检查:定时检查已注册的服务,若长时间没有发送心跳检查,则从注册表移除。

3 原理

3.1 Register 服务注册

注册在第一次心跳发生的时候进行提交。

3.2 Renew 心跳

Eureka客户需要每30秒发送一次心跳来续租

3.3 Fetch Registry

Eureka客户端从服务器获取注册表信息并将其缓存在本地。

之后会读取自己的缓存来查找其他服务。这个缓存会定期刷新,并获取增量内容。

在获得增量之后,Eureka客户机通过比较服务器返回的实例计数来与服务器协调信息,如果由于某种原因信息不匹配,则再次获取整个注册表信息。

3.4 Cancel

Eureka客户端在关闭时会向Eureka服务器发送取消请求,从而将服务的实例从注册表中移除。

3.5 Time Lag

同步会有一定的时间延迟

Eureka服务器上的有效负载缓存,它会定期刷新以反映新信息。客户端还会定期获取增量,因此更新传播到所有客户端有一定延迟,大概3分钟。

3.6 Communication mechanism

默认情况下Eureka使用Jersey和Jackson以及JSON完成节点间的通讯