第四节 Eureka注册服务

亮子 2021-06-08 12:00:49 17612 0 0 0

1、Eureka简介

Eureka 是 Netflix 开发的服务发现框架,SpringCloud 将它集成在自己的子项目spring-cloud-netflix 中,实现 SpringCloud 的服务发现功能。Eureka 包含两个组件:Eureka Server 和 Eureka Client。

Eureka Server 提供服务注册服务,各个节点启动后,会在 Eureka Server 中进行注册,这样 EurekaServer 中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。

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

Eureka Server 之间通过复制的方式完成数据的同步,Eureka 还提供了客户端缓存机制,即使所有的 Eureka Server 都挂掉,客户端依然可以利用缓存中的信息消费其他服务的 API。综上,Eureka 通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。

图片alt

2、创建Eureka服务工程

1)、创建server-blog-eureka工程

图片alt

2)、在启动类添加@EnableEurekaServer注解

package com.mazong.serverblogeureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class ServerBlogEurekaApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServerBlogEurekaApplication.class, args);
    }

}

3)、修改配置文件

## application.properties
spring.application.name=server-blog-eureka
server.port=6060

eureka.instance.hostname=localhost
# 是否获取注册信息,目前只有自己一个eureka-server,无需同步注册信息
eureka.client.register-with-eureka=false
# 是否注册到eureka,因为自己就是eureka-server所以无需注册
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

#eureka.client.service-url.defaultZone=http://1270.0.1:6060/mazhouhao/

## 访问地址
## http://localhost:6060/

4)、运行访问

图片alt

3、Eureka自我保护机制

默认情况下,如果Eureka Server在一定时间内(**默认90秒**)没有接收到某个微服务实例的心跳,Eureka Server将会移除该实例。但是当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,而微服务本身是正常运行的,此时不应该移除这个微服务,所以引入了自我保护机制。

自我保护模式正是一种针对网络异常波动的安全保护措施,使用自我保护模式能使Eureka集群更加的健壮、稳定的运行。

自我保护机制的工作机制是如果在**15分钟**内超过85%的客户端节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,Eureka Server自动进入自我保护机制

比如在开发测试时,需要频繁地重启微服务实例,但是我们很少会把eureka server一起重启(因为在开发过程中不会修改eureka注册中心),当一分钟内收到的心跳数大量减少时,会触发该保护机制。可以在eureka管理界面看到Renews threshold和Renews(last min),当后者(最后一分钟收到的心跳数)小于前者(心跳阈值)的时候,触发保护机制,会出现红色的警告:

我们可以看到,eureka认为虽然收不到实例的心跳,但它认为实例还是健康的,eureka会保护这些实例,不会把它们从注册表中删掉。