Eureka的解析

143 阅读4分钟

一、Eureka

这是我参与「掘金日新计划 · 6 月更文挑战」的第21天 ,点击查看活动详情

\

基本概念

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

  • Eureka Server\

  • Eureka Client\

Eureka Server提供服务注册服务:

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

  • 多个Eureka Server之间通过复制的方式,来实现服务注册表数据的同步。\

Eureka Client是一个java客户端:

  • 客户端同时也包含一个内置的、使用轮询(round-robin)负载算法的负载均衡器。
  • 在应用启动后,将会 向Eureka Server发送心跳维持自己的注册状态,默认周期为30秒,如果Eureka Server在多个心跳周期内没有 接收到某个节点的心跳,Eureka Server将会从服务注册表中注销该实例,把这个服务节点移除,默认周期为90 秒。

server端配置

 

# 每间隔30s,向服务端发送一次心跳,证明自己依然”存活“
eureka.instance.lease-renewal-interval-in-seconds=30
#告诉服务端,如果我90s之内没有给你发心跳,就代表我“死”了,将我踢出掉
eureka.instance.lease-expiration-duration-in-seconds=90

client端配置

  • Eureka Client 会缓存服务注册表中的信息,所以 Eureka Client 无须每次调用微服务都要先查询Eureka Server,能有效地缓解Eureka Server的压力,而且即使所有的Eureka Server节点都宕掉,Client 依然可以根据缓存中信息找到服务提供者。\

 

#从注册中心获取注册信息,默认true
eureka.client.fetchRegistry=true
# 从注册中心获取注册信息的时间间隔,默认30s
eureka.client.registryFetchIntervalSeconds=30

综上,Eureka通过心跳检查、集群、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。\

\

二、搭建Eureka服务器

官方文档:spring.io/projects/sp…

cloud.spring.io/spring-clou…

1、父工程中定义Spring Cloud的版本

 

<dependencyManagement>
    <dependencies>
        
        <!--Spring Cloud-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.SR2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2、创建Eureka服务器模块

创建Maven模块:guli-commonservice-eureka

3、配置pom

 

<dependencies>
    <!--注册中心-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
</dependencies>

4、配置application.properties

 

#服务端口
server.port=8220
# 服务名
spring.application.name=guli-eureka
# 环境设置:dev、test、prod
spring.profiles.active=dev
#Eureka客户端与Eureka服务端进行通信的地址
eureka.client.service-url.defaultZone=http://192.168.100.100:8220/eureka
#属性表示是否将自己注册到Eureka Server, 默认为true。 由于当前应用就是Eureka Server, 因此设为 false
# 单节点关闭
eureka.client.register-with-eureka=false
#表示是否从Eureka Server获取注册信息,默认为true。 如果这是一个单点的 Eureka Server,不需要同步其他节点的数据,可以设为false
# 单节点关闭
eureka.client.fetch-registry=false

5、创建启动类

在启动类上添加注解@EnableEurekaServer

 

package com.guli.eureka;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class);
    }
}

6、logback.xml

7、启动Eureka注册中心并在浏览器中访问

http://127.0.0.1:8220/\

System Status:系统信息

DS Replicas:服务器副本
Instances currently registered with Eureka:已注册的微服务列表

General Info:一般信息 

Instance Info:实例信息 

三、服务注册

在edu微服务中完成以下配置\

1、客户端配置pom

配置Eureka客户端的pom依赖

 

<!--服务注册-->
<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2、添加服务配置信息

配置application.properties,在客户端微服务中添加注册Eureka服务的配置信息

 

#指定注册中心地址
eureka.client.service-url.defaultZone=http://192.168.100.100:8220/eureka/
#eureka服务器上获取的是服务器的ip地址
eureka.instance.prefer-ip-address=true

3、添加Eureka客户端注解(可选)

这是我参与「掘金日新计划 · 6 月更文挑战」的第21天 ,点击查看活动详情 在客户端微服务启动类中添加注解

在启动类使用@EnableDiscoveryClient或者@EnableEurekaClient声明该应用为Eureka Client

 

@EnableEurekaClient

@EnableDiscoveryClient或者@EnableEurekaClient的区别在于前者是后者的抽象。在Spring Cloud 中,服务发现组件有多种,@EnableDiscoveryClient为各种服务组件提供了支持,而@EnableEurekaClient则只能与Eureka一起工作。在Edgware版本之后,不再需要添加该注解。

4、启动客户端微服务

启动注册中心

启动已注册的微服务,可以在Eureka注册列表中看到被注册的微服务