Eureka入门

举报
李子捌 发表于 2021/11/09 09:09:58 2021/11/09
【摘要】 1、简介Eureka在Spring Cloud Netflix项目中担任微服务注册中心的角色。Eureka本身也是一个微服务,它的作用就是让微服务之间能够互相发现。如上图,服务提供者将自身服务信息注册到Eureka上,服务消费者从Eureka中获取可用服务实例信息,通过客户端负载均衡器Ribbon选择服务发起请求。Eureka解决了以下几个问题:服务消费者`硬编码服务提供者的主机和端口信息服...

1、简介

Eureka在Spring Cloud Netflix项目中担任微服务注册中心的角色。Eureka本身也是一个微服务,它的作用就是让微服务之间能够互相发现。

如上图,服务提供者将自身服务信息注册到Eureka上,服务消费者从Eureka中获取可用服务实例信息,通过客户端负载均衡器Ribbon选择服务发起请求。

Eureka解决了以下几个问题:

  1. 服务消费者`硬编码服务提供者的主机和端口信息
  2. 服务提供者下线后,服务消费者及时感知


2、Eureka使用

2.1 服务搭建

第一步:引入依赖,我这里选择的Spring Cloud 版本是Greenwich.SR1

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.liziba</groupId>
    <artifactId>spring-cloud-netflix-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    
    <properties>
        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

第二步:在应用的主引导类添加@EnableEurekaServer注解,启动Eureka Server

/**
 * <p>
 *     Eureka Server 服务启动类
 * </p>
 *
 * @Author: Liziba
 * @Date: 2021/10/26 23:27
 */

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

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

}

第三步:配置端口信息(由于我本地8080提供了其他服务,因此这里修改了端口信息),默认情况不配置端口,Eureka Server启动后会尝试监听8080端口。

server:
  port: 8761

第四步:浏览器访问http://localhost:8761/,如果看到如下Eureka提供的Dashborad页面表示Eureka Server已经正常启动了


2.2 服务详细配置

配置一:此时Eureka启动,并未有任何服务注册到当前Eureka中,但是实例表中有一个UNKNOWN实例,这是因为Eureka默认会将其本身注册到上面。

## 两个值默认都为true 
eureka:
  client:
  	## 是否从Eureka获取注册信息
    fetch-registry: false
    ## 配置当前微服务是否注册到Eureka
    register-with-eureka: false

此时Eureka中不再有UNKNOWN实例信息,这配置适用于任何服务,通过这两个属性能够告诉该服务该如何Eureka服务进行交互。


配置二:指定Eureka服务端口信息,一般情况下我们指定8761作为Eureka默认端口

server:
  port: 8761


配置三:禁用自我保护模式

我们先来看一个警告信息,当Eureka服务一直未接收到其他服务注册时,会在Eureka的Dashboard中出现如下红色警告:

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

这个提示表明当前Eureka开启了自我保护模式。由于Eureka Server和Eureka Client之间不可避免的存在网络故障问题,Eureka Server可能无法及时收到Eureka Client的心跳请求,如果Eureka Server直接下线该服务,会导致该服务无法被客户端请求。因此Eureka会有如下心态和自我保护机制:

  1. Eureka Cilent每隔30秒,向Eureka Server发送一次服务更新请求(心跳机制),告诉Eureka Server当前Eureka Client存活
  2. Eureka Server统计15分钟内心跳成功的比率是否低于85%,如果低于85% Eureka Server将进入自我保护模式(认为当前服务之间通信存在网络异常),将当前Eureka Server上的注册信息保存起来,并且提示上面红色警告。
  1. 如果Eureka Server判断网络正常,并且Eureka Server在3个更新周期90秒内未收到Eureka Client的更新请求,Eureka Server会注销该服务。


这种机制也可以关闭,但是在生产环境中推荐使用

## 关闭自我保护模式
eureka:
  server:
    enable-self-preservation: false


关闭自我保护模式之后,Eureka Dashboard中会出现如下提示:

THE SELF PRESERVATION MODE IS TURNED OFF. THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.

👇🏻 关注公众号 获取更多资料👇🏻

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。