当前位置:网站首页>eureka的解析

eureka的解析

2022-06-21 21:50:00 InfoQ

一、Eureka

基本概念

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服务器

官方文档:
https://spring.io/projects/spring-cloud

http://cloud.spring.io/spring-cloud-netflix/single/spring-cloud-netflix.html#spring-cloud-eureka-server

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注册列表中看到被注册的微服务
原网站

版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://xie.infoq.cn/article/738235f54f04d9ccd109acdf7