Eureka入门到集群

1、简介

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

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已经正常启动了

Eureka入门到集群

2.2 服务详细配置

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

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

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

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开启了自我保护模式。由于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上的注册信息保存起来,并且提示上面红色警告。

  3. 如果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.

Eureka入门到集群

本篇文章来源于微信公众号: 李子捌

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/10735.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!